作者: 機械伯爵 '
日時: 2006/9/23(10:40)
 機械’す。

> ruby-list に続きオライリーにもこのアドレスからのメールが
> spam判定されてしまい、少々へこんでいます。

 spamにひっかかるような、ヘッダかなんか、使ってるん
じゃないんですか?

> > ※以前ウィキペディアで、PythonはC++に似てる、と書いたら、修正されて
> >  しまった。主張に根拠が無いというのが理由らしいが、
> >  「Programming Python」では、「C++を簡単にした」という感じの例題が
> >  結構あるのに……C++という言葉自体に偏見があるんじゃないかなぁ。
> 
> 
> いや、それはわたしでも詳しく訊きたいですが(^^;
> C++で書いたプログラムとPythonで書いたそれを並べてみて
> 字面的に似ているとでもいうことでない限り、「PythonはC++に似てる」
> とは書けないような…

 ストラウストラップの本読んでると、C++への酷評とは逆に、
本人は何度も『エレガントな書き方』にこだわってるのが分かり
ます。

 で、とりあえず私の主張なんですが、

1.オブジェクト指向プログラミング言語の源流を、Simula67でなく、
 SmalltalkとC++に置くなら、Pythonの記法は確実にC++系の
 シンタックスを採用していますし、オブジェクトもC++の
 『抽象オブジェクトの延長としてのクラス』が基本です。
 特に、RubyがSmalltalkを意識してるのに対し、PythonがSmalltalk
 から取り入れたのって、'//'演算子くらいじゃないでしょうかね。

2.C++とPythonの違いは、主にシステム記述用コンパイル言語としての
 C++と、プロトタイピング/スクリプト言語としてのPythonという
 用途の違いに由来するものが多いような気がします。クラスの中で
 すらアクセスレベルを設定し、厳密な型チェックを行うC++と、
 アクセス制限/型チェックなにそれ?なPythonは、いかにも違って
 見えますが、これは言語設計の理念というより、用途の違いに
 由来するものではないかな、と私は考えます。

3.妙な自由度……たとえばJavaと比較すると分かりやすいんですが、
 JavaがC++から進化する際に『不要』と切り捨てた多重継承や、
 演算子のオーバーロードが、なぜか平気な顔をして残っている
 あたり、「とりあえずC++で出来そうなことはやれるように残して
 おこう」的な思考があるのではないかと。
 ただし、演算子のオーバーロードとは言いましたが、Pythonは
 演算子をオーバーロードするのではなく、メソッドフックを
 変更させる方法なので、この点はSmalltalk式のやり方と
 言えないわけではないです。しかし、数値を利用する関数を
 定義するのに、数値クラスを再定義するほど、Pythonでは
 徹底していませんので、ここらへんは、曖昧に中道かな、と。

4.Pythonに様々なモノが入り交じっているのはご存知の通りですが、
 ベースがABC言語かというと、かなり疑問が残ります。最近、
 『括弧の無いLisp』という意味もなんとなくわかってきましたが、
 それでも、全体的にはまずC++をベースに置いて、そこから
 色々な要素を付け加えたり省略したりしたのではないかと思います。
 だからこそ、『言語の特徴』を言うのが難しい言語のくせに、
 『C++との差異』ははっきりわかってる、というのは、逆説的に
 C++をベースにしていると認めているようなものではないでしょうか?

 よって、

> 設計思想的にも別のところに行ってますよね?

 というのは、『用途と条件は違うけど、果たしてそうか?』と
疑問視しておきたいと思います。

 ストラウストラップも、GvRも(ついでにヴィルトも)、
コードの見やすさにこだわっていますからねぇ。
 
 ま、全てひっくるめて、私の妄想だと言い切れないところは辛い
ですが(笑)

 /機械伯爵’/