Jun Inoue
jun.l****@gmail*****
2006年 6月 5日 (月) 03:08:09 JST
YamaKen <yamak****@bp*****> writes: > At Tue, 30 May 2006 23:57:07 -0700 (PDT), > jun.l****@gmail***** wrote: > > > > YamaKen <yamak****@bp*****> writes: > > > > > 再々編されたstorage-compact.hを見てみました。細かい部分で色々手 > > > を入れたので、まずいところがあったら指摘してください。 > > > > 特に問題は見当たりませんが、l_freelist が ScmObj というのは疑問。この > > list にぶら下がってるのはあくまで cell であって object location ではな > > いので conceptual にも ScmCell* が妥当だと思います (別に performance > > のためだけに変更したわけじゃありませんよ)。 > > うーん。私はobject locationのつもりです。 あーそっか、GC を memory 管理ではなくて cell 管理と見なしてるんですね。 じゃあまあ object location で良いかもしれません。 > > 実装面で言っても、ScmObj に特殊な encoding rule を採用するにしても初期 > > 化時に dereference がどうせ要るし、cell の位置を特定する必要があるわけ > > で。それに sweep して freelist に追加するときも手元にあるのは pointer > > で、その際に初期化しようとすると、何 object として初期化していいかわか > > らないという catch-22 に嵌まるかもしれないので。 > > 後半の「初期化」というのはどの状況のどの操作の事を指すのか分かり > ませんが、listを構成する各cellのnextに格納されているのがobject > locationである以上、listの先頭を指すl_freelistもobject location > として統一的に扱うのが自然と思います。ScmCell *l_freelistとして > もobject location <-> pointerの変換コストはpush/pop時点に移動す > るだけで消えるわけではないし。 Next の中身が object location というのは任意です。Next のためにはあく まで十分に大きい slot が置いてあるだけであって、それが pointer か location か整数かそれ以外かは accessor の interface 次第です。だから 「next が location だから〜」というのは間違い。 初期化に関しては、cdr-coding とかと記憶混濁してました。忘れてください。 > この議論ではstorageモデルの抽象化能力についてお互いが期待してい > る限界が違っているような気がするので、実際にl_freelistの型の違い > が問題になるような実装(動的heap再配置とか)が出てくるまでは話が平 > 行線になりそうな気がします。それまでは保留としときませんか? 継続 > してメンテする意思のあるヤマケンの案をひとまず採っておくという事 > で。 じゃあそれでいいですが、freelist を object location と見なすということ は、accessor が object location に課す contract を守らなくてはならない という事なのは考慮しといてください (以前の tag が無いから assertion に 引っかかる問題とかそれの類)。 でも最初の投稿書きながらチラッとは考えましたが、動的 heap 再配置って何 に使います? Copy GC と比べたときの得失を考えると、有用性のほどは?