補足(いいわけ?)001
これまた検索エンジン(Google)で「C言語ポインタ完全制覇」 で検索して見つけたんですが、rubyのメイリングリスト(ruby-list)で、 まつもとゆきひろさんがこんなことおっしゃってますね (2行しかないので全文引用します。あしからず)。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/27218
Subject: [ruby-list:27218] C 言語ポインタ完全制覇 From: matz@zetabits.com (Yukihiro Matsumoto) Date: Thu, 18 Jan 2001 07:12:58 +0900 ------------------------------------------------------------ また、迷教科書の登場なのでしょうか? リファレンス(参照)とポインタ(アドレス値)の違いって常識だと思ってたんだけど。
なにぶんこれだけなので、まつもとさんの真意はいまひとつわかりませんが、 まつもとさんが著書(「オブジェクト指向スクリプト言語Ruby」)の中で こんなことを書いておられることから察するに(p.26)、
Rubyにはポインタという概念がありません。 あるのはオブジェクトに対する参照という概念だけです。
私が、「JavaにもRubyにも(LispにもSmalltalkにもVBにも)ポインタはある」 なんてことを書いていることを問題にしているのだと、とりあえず解釈します。
で、確かにこれらの言語では「ポインタ」と呼ばずに「参照(リファレンス)」 と呼ぶことが多いわけですが、「リファレンス」と「ポインタ」が 違うもので、そしてそれが常識かというと...
「常識だと思ってたんだけど」ではわかりかねるので、 ご本人がこれを読むことがあればぜひ説明願いたいところです。
例えばPascalやModula2の「ポインタ」であるとか、 Bertrand Mayerさんの「オブジェクト指向入門」(Object-oriented Software Constructionの初版の方)のp.119にある
この問題はポインタを備えたどんな言語(Pascal, Ada, Modula-2, C, Lispなど) についても生じる問題であるが、単純な型以外の型がすべてポインタ型である Eiffelのようなオブジェクト指向言語ではとくに深刻である。
という表現(第1版の原書は持ってないので原書による確認はしてません。 第2版には、上記そのものずばりの表現はないみたい)における 「ポインタ」とか、あるいはJLSの 「4.3.1 オブジェクト」の
参照値(しばしば単に 参照(references) と呼ぶ)は,オブジェクトへの ポインタ(pointers)もしくは, いかなるオブジェクトも参照しない特別な空参照となる。
に出てくる「ポインタ」が、「参照」と何か違ったものである、とは、 常識知らずの私にはちとわかりかねるのですが。
そういえばfortran90にも「ポインタ」はあったっけ。 いま調べたところによると、あれはちょっと目C++の参照みたいだけど、 代入はできるようだから、やっぱりポインタ(JavaやRubyの参照)相当品ですね。
ところで、Rubyについてはよく知りませんが、 Javaについては、ポインタのあるなしはいくつかの場所で既に話題になっています。
とりあえずメジャーなところで、JavaHouseの トピックスの 「Java言語→変数/引数」には、
「Javaにはポインタがない」という言説はそろそろ撲滅されるべきである [j-h-b:28505] [j-h-b:28630] [j-h-b:28763]
なんて項目があります。関連項目としては、(これを振ったのは私自身ですが) [j-h-b:37867]「『Javaにはポインタがない』の出処」てのもあります。
他には、「誰にも分からないJava講座」における
「javaはポインタの言語だ」とか、
Peter van der Lindenさんの
Java Programmer's FAQの、
5.(Sect. 6) How can I program linked lists if there are no pointers?
の項とか(これは昔は日本のSunのページに日本語訳も載ってたんだけど、
今はFAQごとなくなっている。ちぇっ)。
ときに、まつもとさんの元メイルを見ると、『ポインタ(アドレス値)』と、 ポインタといえばアドレス値であるかのように書いてあります。
まあ、参照(リファレンス)と「アドレス値」の違いなら、私にも分かります。 これは確かに常識でしょう(まあ、 参照を「アドレス値」で実装することもあるだろうけど、 少なくとも概念の階層が違う)。
「ポインタといえばアドレス値」というのが、 まつもとさんにとっての「ポインタという言葉の定義」であるのなら、 言葉の定義なんてのは人によって異なるのはよくある話なので とやかく言ってもしょうがないことかもしれませんが、 それにしても、その定義(?)は、 少なくとも「万人にとって説明不要の常識ではない」ぐらいのことは 言ってもよいと思います。
「補足(いいわけ?)」の目次に戻る | ひとつ前のページ | ひとつ後のページ | 「C言語 ポインタ完全制覇」のページに戻る | トップページに戻る