まつもと ゆきひろです

In message "[ruby-list:13876] Re: What is Object in Ruby? (Re: Ruby and LISP)"
    on 99/04/19, Wakou Aoyama <wakou / fsinet.or.jp> 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 は実装を強
く念頭に置いての表現でした.
                                まつもと ゆきひろ /:|)