Re: interface と型チェックの有無 #3

だーかーらー、話題が違うって言ってるでしょうが。なんでこんなにグダグダつっかかってくるの?


こっちで話しているのは「JavaのinterfaceはObjective-Cのprotocolが元ネタであり、本質的に同じ機能である」という話。それを裏付ける資料があるのに、なんでそれらを無視してGoslingが参考にしたかどうかもわからない論文で話を進めるの?誰も型チェックが無意味とか言ってないでしょ?classもinterfaceも、Javaでは型として使われるけど、型チェックのない動的な言語にも導入されて実際に役に立っている。だからclassやinterfaceの機能は型チェックとは関係なく独立して存在できるし、両者は分けて考えることができる。前に書いたように、あなたが「interfaceと型チェックは不可分」と考えるならそれはあなたの自由。ただ自分とは考えが違いますね、で終了。これ以上話しても進展はなし。

何に焦点を当てているのか分からない、と言われてもこれ以上ない位明確に書いてあるつもりだけどなぁ。

interface と型チェックの有無 #3 - odz buffer

分かりませんでしたね。なにしろ話がかみ合ってませんので。


とりあえずそちらの焦点が明らかになったので、これで「こちらとは話の焦点が違う」ということを認識してくれますか?

そりゃ、静的型付けを行わない interface も全くの無意味ではないかもしれない。XML パーザが返すオブジェクトは DOM のインターフェースを備えていますとドキュメントに書いておいて、その仕様に関して記述するのは意味がある。でも、それってドキュメントとか規約レベルの話でないの?

interface と型チェックの有無 #3 - odz buffer

なんでこんな結論になるの。interfaceやprotocolにメソッドの宣言を書いていれば、それらがclass定義時に本当に定義されているかチェックできるでしょ?型チェックのない動的な言語でも(本当にするかどうかは別として)。これ、前にも指摘したと思うけど。


class定義時にチェックできるんだからこれは十分言語レベルの機能だと思うけど、それを『ドキュメントとか規約レベルの話』と思うならどうぞご自由に。そう考えるのもあなたの自由。ここでも考えが違うから、これ以上の議論には意味がない。つうか、これを『規約レベルの話』とか言われると、もう前提が根本的に違うから、議論になるはずがない。


それから、『静的な型付けをしないinterfaceやprotocolなんて無意味』と主張するのはあなたの勝手ですけど、その根拠としてsuminさん紹介の論文を出すのは止めてくださいね。あの論文の主旨は『interfaceを型として使えば静的な言語でも柔軟なプログラムが可能』ということであり、『静的な型付けをしないinterfaceなんて無意味』という主張は含まれていないんですから。

少なくとも Java においては例の論文と同様に interface は subtyping の仕組みを含んでいるし、Java そのものとしても interface を使った subtyping は重要な位置にある訳で、その部分をスポイルして比較してもしょうがないでしょう。

interface と型チェックの有無 #3 - odz buffer

ここではどういった意味で『比較』といってますか?そちらとこちらで意思の疎通がとれていない以上、こんな些細なことでも明らかにしてないと、無駄の再生産になりますので。


何度も繰り返しますが、こちらでの話の焦点は「JavaのinterfaceはObjective-Cのprotocolが元ネタで、両者は本質的に同じ機能」ということです。あなたは「Javaのinterfaceは型チェックを行うからObjective-Cのprotocolとは本質的に違うもの」と考えているということでいいんですよね?それなら意見の相違ということで、これ以上の議論は無意味です。終了。


いちおう言っときますけど、JavaのinterfaceとObjective-Cのprotocolは同じものだと考えてる人は私以外にもいます。そもそも本当に違うものなら、両者を結びつけて考えることなんかあるわけないですし、GoslingがObjective-Cについて言及したり、Javaの中の人が「JavaのinterfaceはObjective-Cのprotocolのパクリ」と言うはずがありません。しかし実際には言及し発言しているわけですから、同じものだと考えてる人が大勢いるということです。

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...

Java Was Strongly Influenced by Objective-C

なんでこういった資料を意図的に無視するんですかね。interfaceとか型チェックとか同じことばっかりで聞き飽きたから、どうせならこれらの資料を無視した理由のほうが聞きたい。