Emacs LispにはLispで記述された関数をより効率的に実行できる、バイトコード(byte-code)と呼ばれる特別な表現に翻訳するコンパイラー(compiler)があります。コンパイラーはLispの関数定義をバイトコードに置き換えます。バイトコード関数が呼び出されたとき、その定義はバイトコードインタープリター(byte-code interpreter)により評価されます。
バイトコンパイルされたコードは、(本当のコンパイル済みコードのように)そのマシンのハードウェアによって直接実行されるのではなく、バイトコンパイラーによって評価されるため、バイトコードはリコンパイルしなくてもマシン間での完全な可搬性を有します。しかし本当にコンパイルされたコードほど高速ではありません。
一般的に任意のバージョンのEmacsはそれ以前のバージョンのEmacsにより生成されたバイトコンパイル済みコードを実行できますが、その逆は成り立ちません。
あるLispファイルを常にコンパイルせずに実行したい場合は、以下のようにno-byte-compile
をバインドするファイルローカル変数を配置します:
;; -*-no-byte-compile: t; -*-
• Speed of Byte-Code: | バイトコンパイルによるスピードアップ例。 | |
• Compilation Functions: | バイトコンパイル関数。 | |
• Docs and Compilation: | ドキュメント文字列のダイナミックロード。 | |
• Dynamic Loading: | 個々の関数のダイナミックロード。 | |
• Eval During Compile: | コンパイル時に評価されるコード。 | |
• Compiler Errors: | コンパイラーのエラーメッセージの扱い。 | |
• Byte-Code Objects: | バイトコンパイル済み関数に使用されるデータ型。 | |
• Disassembly: | バイトコードの逆アセンブル; バイトコードの読み方。 |