青山です。 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>