原です。

>   豊福@パパイヤです。
> 
> 原さん
> > TheArray = []
> > class YaArray
> >   def push(x); TheArray.push x; end
> >   def e(i); TheArray[i]; end
> > end
> > foo = YaArray.new
> > foo.push("obj1")
> > foo.push("obj2")
> > p foo.e(0) #=> "obj1"
> > p foo.e(1) #=> "obj2"
> > 
> > このときオブジェクト foo は "obj1", "obj2" を参照していると
> > 言っていいのでしょうか?参照している様にも見えるけど、単に参
> > 照関係を横から見ているだけの様にも思えるし。
> 
>   参照とは何かに答えられないですが、現実の GC の実装の
> 感覚に合う「何か」は私もあると思います。
>   それに合うように上の例を解釈すると、
>   def e(i); x = TheArray; return x.[](i); end
> と読み直して「e() のコードの中に TheArray を参照する値が
> 入っている。TheArray[0] は return をつたって通り抜けて
> しまうから "obj1" そのものは参照していない」と見ています。

何となく分かったような気もします。

しかしですね。これを「参照していない」と言うなら、Array の
インスタンスも何も参照しないという結論もある得るかと思うの
です。というのは、Array と同等でインスタンス変数を持たない
クラスをユーザーが作れるかという話を以前したんですけど、
原理的には TheArray というただ一つの Array オブジェクトが
あれば作れます。つまりこれをリニアなメモリだと考えることで、
直列に並べれば複数の配列を格納できるからです。GC だってユー
ザーがコントロールできるかもしれません。ということは、TheArray
を使って Array と同じ機能を持つクラスでありながら、Array は
要素を参照してこっちはしていないとは言えないのではないか。も
しかすると隠れオブジェクトとして実際の Array の実装に TheArray
みたいなのが使われている可能性だって無いわけではない。

って屁理屈でしょうか?

> > の名前になっているとは初耳です。ここでの意味は、オブジェ
> > クトに対する全てのメッセージ(とパラメータ)に対する副作用
> > と返り値の「表全体」をもってオブジェクトの状態と定義する、
> > という感じでしょうか。
> 
>   詳しい意味はわからないのですが、もしあらゆる実際の返り値
> だけから参照を考えるという意味なら次の例が私の感覚に合い
> ません。
> 
>   A = []; B = [];
>   ...
>   def e(i); if (i*i >= 0) A; else B ; end
> 
> e(i) は A しか実際には返しませんが B も参照していると思い
> ます。

ふーむ、なるほど。Java だったら「最適化」しちゃうかも。:-)