>JVMの仕様書 → 参照はポインタ
>
>K&R → ポインタはアドレス
>
>ゆえに参照はアドレス
>
>
>・・・と3段論法にしてしまいますか(^-^;)
私が言っているのは、
・Javaのポインタ(参照)は「C/C++の」ポインタとは違う(ところがある)
→Java謎+落とし穴~ 2.1.2「C/C++のポインタとJavaのポインタとの違い」
・Cのポインタは、必ずしも(生)アドレスである必要はない
→ポインタ完全制覇 2.9 「言語仕様と実装について」
ということなので、村山さんが言うところの、
「JVMはアドレスを使うとは限らんからJavaにはポインタはないのだ」
という批判からすれば、2段階離れたところにいるわけです。
まあ、村山さんの批判対象は、きっと私以外の誰かなのでしょうが。
>↑は冗談としても、ポインタというのはすべからく「データの在り処を
>指し示すもの」でしかないわけで、Javaの「参照」もC言語のような
>ポインタではないという風に結論付けてもポインタというのはプログラミング
>言語にはついて回る概念だと考えています。
そう思います。ただ、もしポインタについて「データの在り処を指し示すもの」
という定義をとらず、「ポインタとはアドレスのことなのだ」という定義の上で
話すのであれば、「Javaにはポインタがない」という主張はあり得ます
(そういうこともJava謎+落とし穴~には書きました)。
でもそれを前提にしてくれるな、というのが私の言いたかったことなのでした。
> 参照渡しについて、値渡しとの違いを説明するときにも「データの在り処を
>渡す」としか説明できないのであれば、それはやはりポインタでしかないと思います。
うーん、これが関数の引数についてであれば、「参照渡し」はあくまで
「変数引数」の実装手段に過ぎない、と考えれば、これをそこまで言ってしまうのは
実装に過度に踏み込んでいる気もします。
参考リンク:
http://java-house.jp/ml/archive/j-h-b/028784.html#body