豊福@パパイヤです。

原さん
> 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" そのものは参照していない」と見ています。
(e() のコード中から TheArray につながる紐が出ている :-))

  def b.[](i); i+8; end
も引数をつたって入ってきて通り抜けてしまうだけだと。

> coalgebra 自体は日常的な商売道具なのですが、それが一分野
> の名前になっているとは初耳です。ここでの意味は、オブジェ
> クトに対する全てのメッセージ(とパラメータ)に対する副作用
> と返り値の「表全体」をもってオブジェクトの状態と定義する、
> という感じでしょうか。

  詳しい意味はわからないのですが、もしあらゆる実際の返り値
だけから参照を考えるという意味なら次の例が私の感覚に合い
ません。

  A = []; B = [];
  ...
  def e(i); if (i*i >= 0) A; else B ; end

e(i) は A しか実際には返しませんが B も参照していると思い
ます。
---
                        豊福@パパイヤ
                        unbound / papaya.juice.or.jp
                        toyofuku / juice.or.jp