「オブジェクト指向言語のはなし」を読みました。プログラミング言語Eiffel
「オブジェクト指向言語のはなし」を読みました。
読み始めればそれなりに面白くてページが進むのですが、その後のどうしても読みたいと思わせる吸引力が弱く、数週間の間隔が空いてまた読む、という具合で結局数ヵ月かかってしまいました。
原題は「Objects Unencapsulated: Java,Eiffel,and C++??」です。 邦題にひねりが無いです。アンカプセル化の皮肉を生かすと、「オブジェクト指向、カプセルの中を暴く」ぐらいの邦題をつけてほしいところです。
原題の最後のクエスチョンふたつはなんでしょう。JavaとC++それぞれに対するクエスチョンでしょうか。
公平なフリをしながら、Eiffelを持ち上げてJavaとC++をこきおろす楽しい本です。どちらかと言うとC++の方がこきおろされているので、C++ファンで、かつマゾ体質の人にはこたえられない内容になっています。
Eiffelが今や大人気のプログラミング言語になっているかと言うと、あまりそんな気配はありません(ぼくが知らないだけかもしれませんが)。理由の一端はかいま見ることができます。ひとことで言うと、教条的な態度です。
例えば、典型的なのが「4.5 ローカルなエンティティ宣言」や「12.1 コメント」の節です。「ローカルなエンティティ宣言」とは、次のような、CではできなくてC++で可能な、変数を使用する場所で定義できる機能のことです。
statement; int foo; ...この定義 statement;
無ければ無いでいいと思っていますが(あった方が便利ですが)、「Eiffelで書けばルーチンが充分に短くなるので、こんな機能は不要だ」という言い方はどうかと思います。同じ理由で、Eiffelのルーチンは短いはずなので、/* ... */のように終端のあるコメントも不要だと言います。
教条的な態度は個人的には嫌いではないですが、こういうことを言っていると流行らないだろうな、とも思います。
Eiffelの興味深い点1。
Javaでは書けない次の記述がEiffelでは書けるようです(たぶん)。少し前にJavaでも書きたいと思ったことがありました。結局、設計の見直しで書く必要が無くなったので、必須なのかは分かりません。
void methodFoo(List<Base> list); に対して、 Baseの派生型Derivedの List<Derived> dlist; を引数に渡せる methodFoo(dlist);
Eiffelの興味深い点2。
377ページに次の記述があります。
「(Eiffelでは)オブジェクトは、1つのスレッドにしか属しません」
字義通り解釈すると、かなり大胆な割り切りに感じます。不便そうに感じるのは人間が古いのでしょうか。
Eiffelの興味深い点3。
OCamlの成績が良い、と聞いていたdebian.orgでのベンチマークですが、Eiffel(SmartEiffel)も結構良い成績です。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/eiffel-eiffel/tbping