前: Writing Emacs Primitives, 上: GNU Emacs Internals


B.6 オブジェクトの内部

GNU Emacs Lispは、さまざまな型のデータを扱います。 実際のデータはヒープに保存されていて、 プログラムはポインタを介してそれらを参照します。 ほとんどの実装では、ポインタは32ビット長です。 Emacsをコンパイルしたオペレーティングシステムやマシンの種類に依存しますが、 オブジェクトのアドレスには28ビットを使い、 残りのビットはガベッジコレクションの印や オブジェクトの型を表す識別子であるタグに使います。

Lispオブジェクトはタグ付ポインタとして表現しますから、 任意のオブジェクトのLispデータ型を判定することが可能です。 CのデータLisp_Objectは、任意のデータ型のLispオブジェクトを保持できます。 普通の変数はLisp_Object型ですから、 Lispの任意の値の任意の型を保持できます。 実際のデータ型は、実行中にのみ判定できます。 関数引数についても同じことがいえます。 特定の型の引数のみを受け付る関数が必要な場合には、 適切な述語(see Type Predicates) を使って型を明示的に検査する必要があります。