JavaのinterfaceはObjective-Cがネタ元だとGosling自身が認めている件

Javaのinterfaceの起源が何なのかが話題(あるいは騒動)になっている。

  • 世界最初の Interface を考案したのは Java ?

http://d.hatena.ne.jp/minekoa/20071125/1195991187

  • 世界最初のXXXを考案したのは誰か?

http://d.hatena.ne.jp/JavaBlack/20071125/

http://d.hatena.ne.jp/sumim/20071126/p1


結論からいうと、Javaのinterfaceは、Objective-Cのprotocolがネタ元である。


例えば「Java interface 起源」でぐぐると、このページがひっかかる。

  • simpleTypeを考える

http://www.asahi-net.or.jp/~dp8t-asm/java/articles/JavaDesignNote13_ja.html

引用すると、

Javaのinterfaceの起源として、以前の記事中で「Javaの発明」というような表現を使っていたりしましたが、直接の起源としてObjective-Cがあるようです。
http://www.javasoft.com/people/jag/Presentations/TheStoryOfJava/img24.htm

http://www.asahi-net.or.jp/~dp8t-asm/java/articles/JavaDesignNote13_ja.html

上記のページは、今は404 Not Foundなのだが、WebArchiveに残ってる。


念のため貼付けておく。

The Story of Java - page 24


これはGoslingによるプレゼンテーション資料なのだが、ここに「add ObjectiveC interfaces」と書いてある*1。故意な解釈さえしなければ、Objective-Cのprotocolがネタ元なのは明らか。Gosling自身が認めている。


また「Java interface Objective-C protocol」でぐぐると、こんなページが。

http://cs.gmu.edu/~sean/stuff/java-objc.html


これはこのコメントでも紹介されているけど、この文章では、NeXTのエンジニアがSunに入り、Objective-CJavaの言語仕様に大きな影響を与えたと書いてある。interfaceだけでなく、intやfloatのラッパークラスであるIntegerやFloatが用意されたのも、Objective-Cの影響らしい。

I'm pretty sure that Java's 'interface' is a direct rip-off of Obj-C's 'protocol' which was largely designed by these ex-NeXT'ers...
Many of those strange primitive wrapper classes, like Integer and Number came from Lee Boynton, one of the early NeXT Obj-C class library guys who hated 'int' and 'float' types.

Java Was Strongly Influenced by Objective-C

当時、Javaはまだ公開されておらず(名前もJavaではなかった)、対してObjective-Cにはprotocolはすでに実装されていた。よほど故意な解釈さえしなければ、Objective-Cのほうが先なのは明白。


このように、ネットを調べれば情報はちゃんと出てくる。


・・・


さて今回の騒動は、発端はJavaBlack氏の

例えばInterfaceなどというものはJava以前には,まず存在しなかった.

「難しい言語」の補足 - カレーなる辛口Javaな転職日記

という一言であった。これは間違いなので、各所からいろいろツッコミが入った。しかし当のJavaBlack氏は屁理屈をならべるだけで、間違いを認めようとしない。


最初の発言が間違いだったことはまあよい。Javaしか知らない人(あるいは1つの知識しか持たない人)にはよくありがちなことだし、ブログごときで「ちゃんと裏を取ってから書け」などというつもりはない(論文や新聞記事じゃないんだから)。


本当に問題なのは、氏が自分の間違いを認めようとしないことであろう。これだけいろんな情報か寄せられていながら、氏はまだ自分の発言を訂正するつもりがないようだ。


しかも、『InterfaceなどというものはJava以前には,まず存在しなかった』と断定していながら、この根拠を求められると『それは「悪魔の証明」といって、まず証明できない』と言ったり(じゃあ断定するなよ)、『Objective-CのprotocolはJavaのinterfaceと同じ』と指摘されても『機能が同じでも目的が異なれば違う機能』と言ったり(機能が同じなんだから同じ機能に決まってるじゃん)、トンデモ発言を繰り返す。


Javaがinterfaceという概念を広めたことには、誰も異論はないだろう。概念自体は以前からあったとしても、それを言語仕様に取り込むことで、普通のプログラマーにも広めたという功績は賞賛できるものだ。


しかし、interfaceを発明したのがJavaが最初であるかのごとき発言(しかもろくに調べもせずに!)は、すでに同じ機能を実装していた他の言語とその開発者たちに対して大変失礼である。
また寄せられた様々な情報をねじ曲げたり無視する態度も、情報を寄せてくれた方々に対して失礼である。
誰が最初かなんてどうでもいいじゃんと思う人もいるだろうが、今回の話は他人の功績を横取りしようとすることであり、見過ごすわけにはいかない。


・・・


JavaBlack氏のブログは、口が悪いにも関わらず人気ブログのようだ。それは氏の意見が、口は悪いが言ってることが正しいと皆が思っているからだろう。


しかし今回の件は、落胆せざるを得ない。他人の間違いを指摘していた人間が、逆に自分が指摘される側になったときに、自分の間違いをこうも認めようとしないという実例は、よくあることとはいえ、あまり気持ちのいいものではない。


こんなのは、

  • 部下/後輩/生徒/子供/一般人の間違いをいつもあげつらっている上司/先輩/教師/親/マスゴミが、自分の間違いを指摘されたら頑なにそれを認めようとしない(あるいは逆切れする)

というのとまあ同じだ。自分の間違いを認めるのがなんでそんなにイヤなのだろうか?

*1:『add ObjectiveC protocol』でなくて『add ObjectiveC interfaces』なのは、protocolという名前がマイナーだからであろう。