From: Shin-ichiro Hara Date: 1999-04-16T22:51:29+09:00 Subject: [ruby-list:13808] Re: What is Object in Ruby? (Re: Ruby and LISP) 原です。 In message "[ruby-list:13805] Re: What is Object in Ruby? (Re: Ruby and LISP)" on 99/04/16, GOTO Kentaro writes: | |ごとけんです |>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" |よいでしょう。でも参照という言葉は Ruby には馴染まない気 |もします。 その様にはっきり言ってもらってすっきりするところがあります。 しかし、オブジェクトのインスタンス変数が参照しているオブジ ェクトは、はやり「参照している」という言葉は使いたい気がし ます。 |>そもそもオブジェクトがオブジェクトを参照するってどういう定義 |>かしら。変数がオブジェクトを参照するのと、変数がオブジェクト |>に束縛される(広義)ことは同値でしょうか? | |僕は(ナイーヴには)束縛は「構造」で、参照は「イベント」だ |と分けて考えます。この分け方に従えば上の例は「参照の結果」 |が "obj1" や "obj2" となります。ただし、それはあくまで |foo にとっては、TheArray のメソッドが返したものでしかな |いと思います。つまり、せいぜい「参照していた」ということ |はできるでしょうが、「参照している」とはいえないという主 |張です。定義にはなってませんが。 なるほど。わかります。つまりメッセージが最終的に到達した という意味で、参照していたというのですね。メッセージ毎に 到達するオブジェクトを特定出来るが、あるふたつのオブジェ クトを取って「参照関係にあるか?」という問いは転倒してい ると。 |別な例でいうと、 | |a = [8,9] | |は、「a[0] が 8 であり、かつ、a[1] が 9 である」という以 |外のいい方をしてもあまり嬉しくないと思うのです。「参照」 |というのは「値」と同様に C のような hard typing な言語な |ら自明に定義されるとは思いますが、Ruby では自然な定義は |ないと思うので、混乱の原因になるのではないでしょうか?? 分かります。例えば b = Object.new def b.[](i); i+8; end とした場合、a[0] == b[0], a[1] == b[1] ですが、いくら なんでも b が 8 と 9 を参照しているとは言い難い。そん な事を言えば b は少なくとも全ての Fixnum を参照してい ると言わなくてはならなくなる。 しかしですね。確かに参照していることの定義はまだはっ きりしないけれど、参照していると呼びたい局面は確実に ある。例えばオブジェクトのインスタンス変数が束縛して いるオブジェクトはやはり参照していると言いたくなる。 あるいは a = [ object1, object2 ] の例でも、「a のス コープ内では object1, object2 はガベージコレクトの対 象にならない(ほんとか?)のは [ object1, object2 ] が それらを参照しているから」という言葉を使いたい。 不完全でもある程度役に立つ「参照関係」の定義はあるの ではないでしょうか。 |またぼくが構造といっているのは、さしあたりスナップショッ |トを撮ることに意味があるものだけです。各名前空間と個々の |名前にオブジェクトを対応させること(束縛)は構造だと思いま |す。これが各時点で意味を持たないとレシーバーが確定しない |ので。一方、オブジェクト自体はその「状態」を便宜的にかん |がえることはあるものの状態を確定させる際にイベント間での |時間順序を定めることができるかどうかにちょっと疑問がある |ので、今のところは構造だと思ってません。ただし、オブジェ |クトが存在するということ自体は構造の構成要素だと考えます。 なるほど、たとえ構造が動的であるとしても、構造と状態を 分けて考えると見えてくるものがあります。しかし束縛(の 束)が構造だとしても、インスタンス変数の束縛(の束)は、オ ブジェクトの状態の構成要素でもある気がします。あ、また 混乱してしまった。(^^; |まつもとさんが以前「状態」についていっていたのはそういう |ことも含意するのだと理解しています。alternative な見方は |メソッドの結果の可能性全体をもってそのオブジェクトの状態 |とみなすものです。こちらは coalgebra という名前の分野で |近年盛んに研究されていて、可能性全体をとることで一意性が |保証されるのでこれもいいかもと思って僕は脇でみています。 coalgebra 自体は日常的な商売道具なのですが、それが一分野 の名前になっているとは初耳です。ここでの意味は、オブジェ クトに対する全てのメッセージ(とパラメータ)に対する副作用 と返り値の「表全体」をもってオブジェクトの状態と定義する、 という感じでしょうか。非決定的だったら可能な状態を全部持っ てきて決定的な議論に持ち込むという、いかにも超越的という か数学的な態度ですね(つーか、数学なんだから当たり前か)。 まつもとさんはもうちょっと気楽な感じが好みみたいだったけ ど。:-) 今まで「状態」の定義については特に興味を感じなかったのだ けど、「参照関係」を考えるには必然的に出てくる問題である のを理解しました。