ReadingGauche なメモ

なんというか機械的に進めれないあたりが微妙。しかも抜糸後のナニが微妙で多用する左手小指をきちんと使えなくって入力速度も思考のスピードを邪魔してたり。
今、ハマッてるのは Scm_ModuleClass の記述なんですが色々見るに Gauche のモジュールとゆーソレの知識的にも微妙。後天性記憶不全なソレ的に微妙なのが

  • クラスの考え方をちょっとだけイメージできてたのですが忘れた
  • クラスとインスタンスの関係のイメージが微妙
  • む。cpa 属性か。いや cpl か。directSupers なんてのもあるな

で、継承を google 先生に

当たり前ですが Gauche リファレンスに hit

上記によると

クラスを定義したとき、そのクラスとそのスーパークラスは、サブクラスからスーパークラスという順序になり、クラスのリストがその順で生成されます。このリストのことをクラス順位リスト、あるいは CPL といいます。すべてのクラスはそれぞれ自身の CPL を持っています。クラスの CPL は常に自分自身からはじまり、 で終ります。

7.3.2 継承より引用
とあるんでとりあえず cpl がソレなのかな。あとマニュアル確認しつつ以下のコマンドを REPL

gosh> (define-class <grid-layout> () ())
<grid-layout>
gosh> (map class-name (class-precedence-list <grid-layout>))
(<grid-layout> <object> <top>)
gosh> (class-precedence-list <grid-layout>)
(#<class <grid-layout>> #<class <object>> #<class <top>>)
gosh> (class-precedence-list <module>)
(#<class <module>> #<class <collection>> #<class <top>>)
gosh> 

うーん。クラスとオブジェクトのソレはどうやって紐が付いてるんだっけ。あ、これだ

SCM_DEFINE_BUILTIN_CLASS(Scm_ModuleClass,
                         module_print, NULL, NULL, NULL,
                         SCM_CLASS_COLLECTION_CPL);

module.c より引用
ええと、SCM_CLASS_COLLECTION_CPL の意図が微妙に見えん。

#define SCM_CLASS_COLLECTION_CPL         (Scm__SequenceCPL+1)

collection.h から引用
で、件の Scm__SequenceCPL の定義は以下

ScmClass *Scm__SequenceCPL[] = {
    SCM_CLASS_STATIC_PTR(Scm_SequenceClass),
    SCM_CLASS_STATIC_PTR(Scm_CollectionClass),
    SCM_CLASS_STATIC_PTR(Scm_TopClass),
    NULL
};

collection.h から引用
なんか微妙に整合してないカンジ。+1 って何だろ。あ、Scm__SequenceCPL の先頭アドレス + 1 なのか。その子供としての Scm_ModuleClass だから上記の階層は確かにビンゴだな。

って

このあたりでマゴマゴしてるあたりが微妙なのか (とほほ
今日はへろへろなので反映不能ッス。