[#14922] alias $gvar — Koji Arai <JCA02266@...>

新井です。

19 messages 2001/10/14

[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error — Shugo Maeda <shugo@...> 2001/10/26

前田です。

[ruby-dev:15003] Re: finalizer problem

From: matz@... (Yukihiro Matsumoto)
Date: 2001-10-25 21:32:10 UTC
List: ruby-dev #15003
まつもと ゆきひろです

In message "[ruby-dev:15001] finalizer problem"
    on 01/10/25, Keiju ISHITSUKA <keiju@Rational.Com> writes:

|「##-->」のところで, p->as.basic.klass = 0 としていますが, これって本当
|に必要なものなのでしょうか?

現状のRubyではファイナライザの実行する部分にとどいたというこ
とは、もうオブジェクトの内容は壊れています。ですから、その壊
れたオブジェクトのメソッドを呼べば最悪コアダンプします。

ということは、

|p->as.basic.klass = 0 にしなくてもプロセスは正常に終了すると思うのですが
|どうなんでしょう?

は成立せず、少なくとも現状では

|というのも, プロセス終了時のここの部分のファイナライザの呼び出しは, オブ
|ジェクトテーブル(ていっていいのかな?)にエントリされている順番にファイナ
|ライズしている(つまりGCしていることになっている)ので, 後で呼ばれたファイ
|ナライザが、先にファイナライズされたオブジェクトのメソッドを呼び出すとエ
|ラーになってしまいます. 

のようなファイナライザの使い方は不可能であるというしかないで
す。Rubyのファイナライザはわざと使い勝手を悪くしてあるんで、
あんまり活用するのもどうかと。使えば使うほど全体のパフォーマ
ンスが落ちますし。

                                まつもと ゆきひろ /:|)

In This Thread

Prev Next