gauche のデータ構造
復習がてら控え。RHG も参考になるかもしれません (誰
いっちゃん使われているのが ScmObj 型。定義は以下。
/* * An opaque pointer. All Scheme objects are represented by * this type. */ typedef struct ScmHeaderRec *ScmObj;
では ScmHeaderRec 構造体は、というと以下。
/* A common header for heap-allocated objects */ typedef struct ScmHeaderRec { ScmByte *tag; /* private. should be accessed only via macros. */ } ScmHeader; #define SCM_HEADER ScmHeader hdr /* for declaration */
tag という属性一発で、ScmHeader 型でもある。以前、初期の gauche の gauche.h を参考に実装をナニしてたんですが、その頃の gauche.h と比べたら情報満載ですな。
そりゃ良いのですが
こーゆー情報を体系的に発信するのは大変かも。あと、gauche.h の TAG STRUCTURE のコメントには 32 bits な ascii な図が出てるんですが ScmByte って何だ、と思ってたらポインタだし (とほほほ
# おそらく以前にも同様のカン違いしてるはず
基本的に各オブジェクトの先頭 word は TAG として使用されているはずです。