青山です。

Tue, Apr 20, 1999 at 08:53:30PM +0900 において
toyofuku / juice.or.jp さん曰く:

>   def e(i); if (i*i >= 0); [1,2,3]; else [4,5,6]; end; end
> 
> というとこでしょうか。
> この [4,5,6] が GC の対象にならないのではということでした。

この場合 GC の対象以前に [4,5,6] というオブジェクトが生成されません。

Tue, Apr 20, 1999 at 03:28:19PM +0900 において
Yukihiro Matsumoto さん曰く:

> |配列式、ハッシュ式、コマンド出力、範囲式(条件式での範囲式は別として) も
> |String(文字列リテラル)と同じく、評価値はそれらのコピーですよね。
>
> これらはリテラルではなく,オブジェクトは評価時に生成されます.

という事で、[] というのは Array.new と同じく、評価した時点でオブジェク
トを生成するのであって、式にそれを記述しただけではオブジェクトを生成し
ません。

また、Class.new 以外に相当する式だったとしても、その式の内容のチェック
は事前には行われないため、評価されない限りはどんな内容であっても(文法
的に間違いでない限り)、そこには何も無いのと同じです。

評価されない限りは GC に影響を与えない事はもちろん、どんな悪さをする式
や制御構造でも何も影響は無いはずです。

式や制御構造、そして、それらの集まりであるプログラム、これらは手続きで
あり、オブジェクトではない。という感じなんでしょうかね。

そして、メソッドも手続きであり...

ああ、評価中でなく、変数に参照されていないオブジェクトは GC の対象にな
ると言えるのかも。 


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