ScmObj * as lvalue 続き

思ったより早く解放されたのでまったり。

今朝の記事への返事

どうでもいいところから返信。

はてな効果?で肝心な場所の&が抜けてましたが

う、それは…(こそこそごにょごにょ)何の話ですか? (笑顔
;; まさか今こっそり直したなんて事は断じて無い。

typedef ScmObj *ScmRef;

#define SCM_REF_CAR(obj) (&SCM_CAR(obj))
#define SCM_REF_CDR(obj) (&SCM_CDR(obj))
#define SCM_DEREF(ref) (*(ref))
#define SCM_SET(ref, obj) (*(ref) = (obj)) 

不本意ですが、SigScheme 外部に export する可能性を考えるとそうするしかありませんね。でも、REF_CAR()/REF_CDR() は嫌。MAKE_REF() 一つを提供して MAKE_REF (CAR (obj)) のように使うことで、「どの slot(*1) も同じ slot(*2) だ」という抽象的な統合が明らかにできます。あと primitive から組み立ててる感じが滲み出て悦(顔。注釈: (*1) は特定の ScmObjInternal instance のどっちか 1 word、(*2) は slot という genus の意味。つまり、「どこの人でも同じ人間だ」というのと同じ構文。

参照がほしい参照がほしい。C++ の参照が欲しい。

しかしなにもおこらなかった。