作者: Bruce.
日時: 2006/9/23(14:32)
Bruce.です。

機械伯爵 ' writes:

> > いや、それはわたしでも詳しく訊きたいですが(^^;
> > C++で書いたプログラムとPythonで書いたそれを並べてみて
> > 字面的に似ているとでもいうことでない限り、「PythonはC++に似てる」
> > とは書けないような…
> 
>  ストラウストラップの本読んでると、C++への酷評とは逆に、
> 本人は何度も『エレガントな書き方』にこだわってるのが分かり
> ます。

んー、禿^Hストラウストラップの本はD&Eも含め何冊も読んでますし、そこかしこ
での発言も見てますので、エレガントな書き方云々というのはまあわかるんですが
言語として似ているかどうかにつながるかどうかはちょっと…

Wikipediaの編集さんもその辺が気になったのではないでしょうか?


> 1.オブジェクト指向プログラミング言語の源流を、Simula67でなく、
>  SmalltalkとC++に置くなら、Pythonの記法は確実にC++系の
>  シンタックスを採用していますし、オブジェクトもC++の
>  『抽象オブジェクトの延長としてのクラス』が基本です。
>  特に、RubyがSmalltalkを意識してるのに対し、PythonがSmalltalk
>  から取り入れたのって、'//'演算子くらいじゃないでしょうかね。
 
C++の構文はプログラミングの進化の系統樹上で突然現れたものではなく
C、さらにはBCPL…とつながってきたものですよね。
#Pascalは別の枝?
オブジェクトの扱いはまあそうかもしれないですね。

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

用途云々以前にそれは「明確な違い」ではないですか?
静的型検査の有無って結構でかい差異だと思うんですが。
似ている言語であるという主張をしようというのにちとその立脚点を
弱くするものではないでしょうか?
 
> 3.妙な自由度……たとえばJavaと比較すると分かりやすいんですが、
>  JavaがC++から進化する際に『不要』と切り捨てた多重継承や、
>  演算子のオーバーロードが、なぜか平気な顔をして残っている
>  あたり、「とりあえずC++で出来そうなことはやれるように残して
>  おこう」的な思考があるのではないかと。
>  ただし、演算子のオーバーロードとは言いましたが、Pythonは
>  演算子をオーバーロードするのではなく、メソッドフックを
>  変更させる方法なので、この点はSmalltalk式のやり方と
>  言えないわけではないです。しかし、数値を利用する関数を
>  定義するのに、数値クラスを再定義するほど、Pythonでは
>  徹底していませんので、ここらへんは、曖昧に中道かな、と。

たとえばここで、Pythonが演算子オーバーロードをサポートしていたとしたなら
「ほら両方とも演算子オーバーロードしているでしょ、似てるじゃん」と云えるとは
思うのですが、実際のところはそうでないわけで、同じような目的を別の手段で
できるからということを似ているという点としてあげるのはちと無理があるのでは
ないかと考えます。

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

静的型検査に対する姿勢の違いは埋めようのない違いになると思いますが
どうでしょう?

カッコのないLispは似たようなことをRubyも云われていたような気がしますが
おいときましょう(笑)
#Perl 6も云いそうだしなっ(笑)

ところで

>  『C++との差異』ははっきりわかってる、というのは、逆説的に
>  C++をベースにしていると認めているようなものではないでしょうか?

ここが理解(or 納得)できません。
機械さんがWikipediaで編集されてしまったというのは「PythonとC++は
似ている」という主張(記述)であり、ベースになっているかどうかは
別の問題ではないでしょうか。確かにベースになってもいなければ似ないかも
しれませんが。

ところで上記のようなことを編集者さんには主張されたのでしょうか?
 
>  ストラウストラップも、GvRも(ついでにヴィルトも)、
> コードの見やすさにこだわっていますからねぇ。

コードの見易さを重視するという点が二人(+α)で同じであったとしても、
言語の設計が同じ方向を向くとは限らないと思います。

#そいやヴィルトってOberonのあとは言語を設計してない?
#なにかご存知ですか? >まつもとさん
#とか振ってみる。

いじょ。