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 型でもある。以前、初期の gauchegauche.h を参考に実装をナニしてたんですが、その頃の gauche.h と比べたら情報満載ですな。

そりゃ良いのですが

こーゆー情報を体系的に発信するのは大変かも。あと、gauche.h の TAG STRUCTURE のコメントには 32 bits な ascii な図が出てるんですが ScmByte って何だ、と思ってたらポインタだし (とほほほ
# おそらく以前にも同様のカン違いしてるはず
基本的に各オブジェクトの先頭 word は TAG として使用されているはずです。

微妙に中途半端

やっぱ gauche.h 凄いな。そういえば gauche-0.1 の gauche.h を基に SICP のいっちゃんケツの問題ヤッてたのを思いだした。
あの作りかけのソースはどこにあるんだろうか、と言いつつ reading gauche のレビュ対応に戻ります。微妙な現実トウヒだし。