web-dev-qa-db-ja.com

PythonはC ++ではなくCで書かれているのはなぜですか?

Pythonのチュートリアル では、Pythonの元の実装はCであると読むことができます。

一方、Python実装、Cで書かれた、(...)

PythonがC++ではなくCで書かれたのはなぜですか?

私はこの決定の背後にある理由を知りたいのですが、答えは(意見に基づくのではなく)歴史的な参照によってサポートされるべきです。

79
Piotr Dobrogost

私が見てきたすべてのことから、それは実際的な理由と歴史的な理由の組み合わせです。 (主に)歴史的な理由は、CPython 1.0が1989年にリリースされたことです。当時、Cは最近標準化されました。 C++コンパイラはほとんど誰も持っていなかったため、C++はほとんど知られておらず、明らかに移植性がありませんでした。

C++ははるかに広く普及しており、現在簡単に入手できますが、CPythonをC++と互換性のあるCのサブセットに書き換えるには、かなりの作業が必要です。それだけでは、実際の利益はほとんどまたはまったく提供されません。

それは Joelのブログ投稿 を最初からやり直し、完全な書き直しを行うことは、ソフトウェア会社が犯すことができる最悪の間違いであるようなものです。私は、Windows 3.0コアからWindows NTコアへのMicrosoftの変換と、MacOS 9からMac OS/XへのAppleの変換を指摘することでこれに対抗します。どちらも会社を殺害しなかったが、どちらも間違いなく大規模で高価な長期プロジェクトでした。どちらも成功に不可欠なものを指します:両方コードベースを(ほとんどの)ユーザーが自由に新しいコードベースに切り替えられるのに十分な時間維持します、(少なくとも知覚された)メリットに基づいています。

ただし、Python規模の開発チームにとっては、そのような変更ははるかに困難です。 Python 2から3への変更でもかなりの労力を要し、同様のオーバーラップが必要でした。しかし、少なくともその場合、変更には直接的な利点があり、 C++(それ自体)は(少なくともすぐには)提供しません。

C++に対するLinus Torvaldsの怒りが提起されたので、それについても触れます。 Guidoから私が見たことは、C++に対して彼がそのような強い否定的な感情を持っていることを示しています。私が彼が言うのを見た最悪のことについて、それは C++を教えることはしばしば災難です -ですが、彼はすぐに、これは主に教師がC++を知らなかった/知らなかったためだと言い続けました。

relative簡単に多くのCコードをC++に変換することは可能ですが、C++から多くの本当の利点を得るには、それよりも少し書き直すだけでなく、関係するほとんどの開発者の大幅な再教育が必要です。ほとんどの適切に作成されたC++は、同じことを実行するために適切に作成されたC++とは実質的に異なります。 ではありませんmallocnewに変更し、printfcout、想像力のあらゆるストレッチによって。

122
Jerry Coffin

ANSI C89で書かれた元々であった理由は、当時のC++が異なるコンパイラなどとの非互換性のために実行可能な選択肢ではなかったからです。つまり、あるコンパイラでコンパイルされたコードが別のコンパイラでコンパイルされたコードを呼び出すことを可能にするABI仕様が思いつくまでに、2005年までかかりましたか。

より興味深い質問は、なぜそれがまだであるのかをC89で記述したことです。

そして、驚くべき答えがあります:C++もC99コンパイラもないプラットフォームで実際にPythonを使用しているためです!Forthにヒントを得たスレッドコードインタープリターの最適化がマージされたとき、- hugeコードについての議論。これは、コードが(必要に応じて)C89の一部ではない計算されたgotoを使用したためです。この機能が一部のプラットフォームで使用できない可能性があるという本当の恐れがありました。そのPythonは現在使用されています。

Unladen Swallowでも同じことが起こり、C++で記述されたLLVMを使用しています。 Unladen SwallowをCPythonにマージするための要件は、JITコンパイラーなしでコンパイルできることであることが非常に明確になりました。C++コンパイラーが存在しないPython onを実行するプラットフォームがあるためです。 。

もちろん、今日では、CPythonが唯一のPython実装ではなくなりました。RPython(静的に型付けされたPythonのサブセット)、JavaのJython、C#のIronPython、Pynieで記述されたPyPyがあります。 NQPやPIRなどで。

30
Jörg W Mittag

よりよい質問は、「なぜPython Pythonで書かれていないのですか?」」

さらに言えば、Pythonクラスとオブジェクトの十分なプリミティブがCで記述されると、それらをインタープリターの残りの記述に使用できるため、代わりにC++を使用しても何も得られません。 。

10
Larry Coleman