青山です。

Mon, Apr 19, 1999 at 05:42:03PM +0900 において
Yukihiro Matsumoto さん曰く:

> |  def Test.e(i); if (i*i >= 0); A; else /abc/; end; end
> 
> だった場合,正規表現オブジェクトはGCされないんですよね.

え、そうなんですか。もともと正規表現オブジェクトが生成されないから、
GC されないというような落ちではないですよね。他にも例外(?)のような場合っ
てあるのでしょうか。

ああ、構文解析の段階で正規表現オブジェクトが生成されるものの、もともと
がここで生成されたものだから GC されないという感じ(って、あいまいとい
うか、ややこしいですね)あたりでしょうか。

> |  def Test.e(i); if (i*i >= 0); A; else "abc"; end; end

とかの "abc" も GC の対象外で、

B = /abc/
> |  def Test.e(i); if (i*i >= 0); A; else B; end; end
remove_const(:B)

では /abc/ は GC の対象ですよね?

このあたりはもはや本筋のオブジェクトの話とは別の実装の話で、dev 行きで
しょうか... (一人だけ別な方向へ展開してしまった)

> |ちょうど [ruby-talk:00284] で、まつもとさんが書かれています。
> |
> |>                                                      The object no
> |> longer referred from anywhere, is automatically recycled.
> |
> |この場合の referred とは、束縛等の事ではなく、評価の事であり(ですよね?)、
> |上の例でいうと、remove_const 後の B(によって参照されていた [])は
> |"The object no longer referred from anywhere" な状態になるので、GC の
> |対象になると思います。
> 
> あー,すいません.青山流の「束縛」と「評価」の定義を十分把握
> してないので,「束縛等ではなく,評価のこと」であるとは言えな
> いのですが,私が上記の文章を書いたときの referred は実装を強
> く念頭に置いての表現でした.

あ、これ、文章がおかしいですね。上記のような、評価されなければ束縛(参
照)は発生しないという感じの事でした。ただ、どうやら構文解析の段階での
生成(?)もあるようなので、このあたりの事はまずオブジェクト指向の話と実
装の話をわけてからでないとまずそうですね。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>