From: matz@... (Yukihiro Matsumoto) Date: 2001-10-26T06:32:10+09:00 Subject: [ruby-dev:15003] Re: finalizer problem まつもと ゆきひろです In message "[ruby-dev:15001] finalizer problem" on 01/10/25, Keiju ISHITSUKA writes: |「##-->」のところで, p->as.basic.klass = 0 としていますが, これって本当 |に必要なものなのでしょうか? 現状のRubyではファイナライザの実行する部分にとどいたというこ とは、もうオブジェクトの内容は壊れています。ですから、その壊 れたオブジェクトのメソッドを呼べば最悪コアダンプします。 ということは、 |p->as.basic.klass = 0 にしなくてもプロセスは正常に終了すると思うのですが |どうなんでしょう? は成立せず、少なくとも現状では |というのも, プロセス終了時のここの部分のファイナライザの呼び出しは, オブ |ジェクトテーブル(ていっていいのかな?)にエントリされている順番にファイナ |ライズしている(つまりGCしていることになっている)ので, 後で呼ばれたファイ |ナライザが、先にファイナライズされたオブジェクトのメソッドを呼び出すとエ |ラーになってしまいます. のようなファイナライザの使い方は不可能であるというしかないで す。Rubyのファイナライザはわざと使い勝手を悪くしてあるんで、 あんまり活用するのもどうかと。使えば使うほど全体のパフォーマ ンスが落ちますし。 まつもと ゆきひろ /:|)