次: Disassembly, 前: Eval During Compile, 上: Byte Compilation
バイトコンパイルした関数は、特別なデータ型、 バイトコード関数オブジェクト(byte-code function objects)です。
内部的には、バイトコード関数オブジェクトはベクトルによく似ています。 しかし、評価時にこのデータ型が呼び出すべき関数として現れると、 特別に扱います。 バイトコード関数オブジェクトの表示表現はベクトルに似ていますが、 開き角括弧`['のまえに余分に`#'が付きます。
バイトコード関数オブジェクトには、少なくとも4つの要素が必要です。 最大個数に制限はありませんが、最初の6つ個の要素にだけ 普通の用途があります。 つぎのとおりです。
nil。
説明文字列がファイルに収めてあれば、値は数かリストである。
実際の説明文字列を取得するには関数documentationを使う
(see Accessing Documentation)。
nil。
バイトコード関数オブジェクトの例を表示表現でつぎに示します。
#[(&optional arg)
"^H\204^F^@\301^P\302^H[!\207"
[arg 1 forward-sexp]
2
254435
"p"]
バイトコードオブジェクトを作る基本的な方法は、
make-byte-codeを使うことです。
バイトコード関数の要素を自分で作ったりしないでください。 それらに整合性がないと、 その関数を呼び出すとEmacsがクラッシュすることもあります。 これらのオブジェクトの作成は、バイトコンパイラに任せるべきです。 バイトコンパイラは整合した要素を作成します(と期待する)。
バイトコードオブジェクトの要素はarefで参照できます。
同じ要素群のベクトルをvconcatで作ることもできます。