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: | バイトコードの逆アセンブル; バイトコードの読み方。 |