[#28337] constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

15 messages 2006/02/18
[#28338] Re: constant look up order in CVS HEAD — Tanaka Akira <akr@...17n.org> 2006/02/19

In article <1140229116.805371.31930.nullmailer@x31.priv.netlab.jp>,

[#28341] Re: constant look up order in CVS HEAD — GOTOU Yuuzou <gotoyuzo@...> 2006/02/19

In message <87lkw8xfay.fsf@m17n.org>,

[#28342] Re: constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...> 2006/02/19

まつもと ゆきひろです

[ruby-dev:28336] Re: SEGV with zlib

From: Tanaka Akira <akr@...17n.org>
Date: 2006-02-15 11:14:08 UTC
List: ruby-dev #28336
In article <20060209111748.A8E247F0.ocean@m2.ccsnet.ne.jp>,
  H.Yamamoto <ocean@m2.ccsnet.ne.jp> writes:

> http://www.nminoru.jp/~nminoru/programming/boehm-gc3.html
>
> に Boehm GC がどうしているのかが載っていました。なるほど、
> gc_mark と gc_sweep の間で、「マークされていない T_DATA で、
> mark 関数と free 関数の両方が定義されているもの」に対して
> gc_mark_children を呼べば(自分自身はマークしない)ルートに
> 当たる T_DATA だけマークが外れた状態になるので、順序付けでき
> るんですね。(自分はマークしないというのは盲点でした)
>
> ただ、この方法にも問題があるらしく、それも記述されています。

まぁ、GC 側だけでどうにか解決しようとすればそんな感じになる
でしょうし、そういう問題が残るでしょうね。

また、現在の Ruby のように、GC はそんな依存関係はいっさいケ
アせずに拡張ライブラリ側がすべての責任を負うというのも、あま
り幸せとはいえないわけです。

なので、狙いは GC と他のコードがもう少し協調してどうにかする、
というところです。

[ruby-dev:28322] でちょっと触れた、依存関係を明示的に登録さ
せるというのもひとつのアイデアです。

また、他のアイデアとしては、オブジェクトが生成される場所を制
御するというものもあります。つまり、finalizer はヒープ内で順
番に起動されますから、先に finalizer が起動すべきオブジェク
トを生成するときには、先に起動する場所にオブジェクトをアロケー
トすればいいわけです。

例えば後者のアイデアについて考えると、利点は依存先が存在する
finalizer つきのオブジェクトを生成しない限り追加コストが発生
しないということです。逆に欠点は依存先が生成時に決定され、変
化してはならないということです。

GzipWriter だと、出力先が IO であれば原理的にはその制約を満
たせそうです。現実にはバッファとして String を使っているので
そこは変える必要がありますが。

また、bdb だと、env を db が参照しているという形についてはそ
れでどうにかなりそうな気もします。

このふたつの事例だけで good enough といえるかというとそこは
難しいわけで、どういうのがいいのかなぁ、と結論には至っていな
いんですが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next