K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[373] Re:実体渡し
投稿者:kit
2007/02/20 02:13:25

引用の順序を変更しています。 > ただ、「PlayerがBoardの実体を保持していてはいかんでしょ > う。」といった話をするときには、「実体」またはそれに類 > する言葉が要るのではないかと思っています。 そうですね。 念のために言うと、僕も、実体という言葉に対して(ぱ)さんと 同じ感覚を持っています。 > > Python プログラマで一人、"call by object reference" > > のことを指して "call by object" と呼んでいる例が見つ > > かりましたが、これだと、日本語と英語で意味が逆になり > > ますし。 > > 日本人でも、「オブジェクト==参照」という解釈の人もいる > ようですから、「日本語と英語で意味が逆」になるわけでも > ないような気がします。 以下の松本さんの例もそうなんですね。 > http://www.rubyist.net/~matz/?date=20030730 > | もっとも多くの言語には「オブジェクト」でない「値」も > | ある。またCの例を出すと、構造体はオブジェクトではな > | い。代入によってコピーが発生するからだ。 BASICの文字 > | 列もオブジェクトではない。 > 最初読んだとき、かなり違和感がありました。「参照」と > 「値」の話ならその通りですが、上記の文を読む限り、「オ > ブジェクト」が「参照」とほぼ同義で使われているからです。 まったく同様な違和感があります。 > >http://aspn.activestate.com/ASPN/Mail/Message/python-Tutor/509290 > ざっと読みました。 > | (2) there is no pointer type in Python, so you > | *can't* pass "a reference" to an object > Pythonは(Javaと同様)なんでもかんでも参照だと思っていま > したが、 それで合ってると思います。 > これはどういう意味でしょう。変数への参照が取れないって > ことかなあ。 参照への参照が取れないってことでしょうね。 > # でも「you *can't* pass "a reference" to an 『object』」 > # だしなあ。 > ## 私がPythonについて誤解しているようでしたらご指摘く > ## ださいませ。 上の記事の著者である Tim Peters が言う "object" というの は、松本さんの言う object と同じもの、すなわち我々の感じ るところの「object への参照」のことなので、特に矛盾はな いと思います。 Smalltalk や Ruby など、全ての型が object である言語で育 つと、自然にこういう感覚になるのかもしれませんが、機械語 による実装を見て意味を理解するタイプの人間からすると、 ちょっとついていけない感じですね。 で、我々の感覚でいう「オブジェクトへの参照の値渡し (call by object reference)」は、Tim Peters や松本さんのような 感覚を持つ人にとっては、 実体渡し == "call by object" となるわけです。 結局、以下の懸念は、まったく当たっており、注釈をつけたの は正解だということになると思います。 > おっしゃるとおり、術語としてちゃんと定義されてな > さそうなので、誤解を招く可能性があると思うのです > が。そのために、先の投稿で注釈をつけたわけです。 同様に、 > 参照渡しを実体渡しと読んでいるのはその本(および > その本に言及したWebページ)以外では、私は見たこと > ないです。そんなの広く使われてるじゃん、という方 > は情報よろしくお願いします。 についても、(少なくとも Python の世界では?) 広く使われている と考えた方がいいのかもしれません。Tim Peters 氏は、Python の 世界では結構な有名人のようですし。 以下は余談です。 > >ただ、Java を含む多くの GC つき言語では、参照の値 > >渡しをするわけで、この術語は使えませんね。 > ええと、少なくともJavaやCなら「値渡ししかない」で済み > そうな気がするのですけど。 もちろんそうです。 ただ、C++ でオブジェクトを参照渡しすることと、まあだいた い等価なことは、Java でも当然行なわれていることなわけで、 C++ と Java に関する話をするときに、これを意味する術語が 欲しいように思います。 で、これを "call by object" と呼びたくない派の人間として は、"call by object reference" のように呼びたくなるわけ です。 もっとも google によると "call by object reference" の 用例は230件しかないそうなので、こういう欲求は、非常に マイナーなのかもしれませんが。
[この投稿を含むスレッドを表示] [この投稿を削除]