Next: Disassembly, Previous: Eval During Compile, Up: 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
で作ることもできます。