From: matz@... (Yukihiro Matsumoto) Date: 1999-04-19T17:42:03+09:00 Subject: [ruby-list:13878] Re: What is Object in Ruby? (Re: Ruby and LISP) まつもと ゆきひろです In message "[ruby-list:13876] Re: What is Object in Ruby? (Re: Ruby and LISP)" on 99/04/19, Wakou Aoyama writes: |$ ruby -e ' |class Test | A = []; B = [] | def Test.e(i); if (i*i >= 0); A; else B; end; end | remove_const(:B) # 本当は remove_const するまでもなく、B = [] 自体が不要 | p e(1) |end |' |[] | |という事で、この式は B を本当にまったく参照しないので(B が未定義という |エラーも発生しない)、この式があっても B(によって参照されていた [])は |GC されると思います。 ま,そうですね.が, | def Test.e(i); if (i*i >= 0); A; else /abc/; end; end だった場合,正規表現オブジェクトはGCされないんですよね. |ちょうど [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 は実装を強 く念頭に置いての表現でした. まつもと ゆきひろ /:|)