web-dev-qa-db-ja.com

Pythonでのプログラミングは、C、C ++またはJavaでのプログラミングよりも高速ですか?

プログラマー の間では、言語が動的で緩やかに型付けされるほど、プログラマーの生産性が向上すると広く信じられています。 Guido van Rossumは、python in 1998 を使用してWebを検索するプログラミング生産性について書いており、これを正確に参照している人々はまだいます請求:

構文的には、Pythonコードは実行可能な疑似コードのように見えます。Pythonを使用したプログラム開発は、C/C++を使用する場合より5-10倍、3-5倍高速です。多くの場合、アプリケーションのプロトタイプは、C/C++/Javaコードを記述せずにPythonで記述できます。多くの場合、プロトタイプは十分に機能的であり、最終製品として提供され、開発時間を大幅に節約します。プロトタイプの一部または全体をC++またはJava-Pythonのオブジェクト指向の性質により、翻訳が簡単なプロセスになります。 。

この問題は科学的に適切に評価されていますか? python でない場合は、おそらく Ruby のような兄弟スクリプト言語向けです Perl または php

問題を調査するのに時間をかけた研究者または専門家の意見でない限り、合理化、類推、または答えることが潜在的に難しい理由の説明を探していません。

私はこの質問を skeptics.SE で最初に質問しましたが、誰かもここで質問することを提案しました。

27
Kit Sunde

Ousterhoutの記事1 スクリプト言語については、プログラミングがより高いレベルで行われるほど、プログラマーの生産性が向上することが示唆されています。私たちがそれを取るならば、ベームが言うように2、プログラマーが所定の時間に書き込むことができる行数は一定であり、言語やそのタイプ(低レベル、システムプログラミング、スクリプト)に依存しないため、この主張は容易に信じられます。結果として得られる、ソースごとのコード行の比率の比率は、システムプログラミング言語よりもスクリプト言語の方が1桁(または数個)優れている場合があります。

スクリプト言語は一般的なタスク(データ構造、文字列操作など)の既成のユーティリティに大きく依存しているため、通常、主な用途は、習得が容易でプログラムを維持するのに効率的な構文を提供することで、実行速度を遅くすることで生産性を高めることです。と。最高の実行速度が必要な場合、スクリプト言語に頼ることはありません。

[1]:J. K.オウスターハウト、スクリプト:21世紀の高水準プログラミング、コンピューター(IEEE)、1998年
[2]:B.ベーム、Software Engineering Economics、Prentice Hall、1981

17
Jawa

生産性を「特定の単純なプログラムを書く時間」として測定する場合、それはプログラマーの経験と素早い心に依存しています。言語ではなく、プログラマを実際に評価します。

時間制限付きのコードコンテストは、そのような種類のタスクでは言語が実際には重要ではないことを示していると思います。他の言語よりも簡単にこのような課題を解決できる言語はありません(少なくとも、言語の相対的な人気を考慮に入れた場合はそうではありません)。

特定の言語で書かれた「最高のプログラムの効果」としてパフォーマンスを測定すると、言語依存性はさらに低くなります。たとえば Galcon AIコンテストの結果 を参照してください。勝者はLISPで書かれています。ただし、次のLISPエントリは#280にランク付けされます。これは、優れたAIを効率的に作成するための言語の適合性について何を示していますか?私の意見では、何もありません。 「ボクシマコ」が最も効果的なアルゴリズムを考え出し、実装したことを示しているだけです。記録として、このコンテストでは時間は重要な要素ではありませんでした。人々はコードを開発するのに2か月以上かかりました。

最後に、パフォーマンスを「プロジェクトを維持するための長期的なコスト」として測定した場合、あなたは何かに夢中になっていると思います。特に、仕事に最適な人材のみを採用し、コストをドルではなく工数で計算する場合は、なおさらです。私はどの言語がこれに最適であるかについて強い意見を持っていますが、あなたにリンクする明確な証拠はありませんので、この意見は省きます。おそらく、他の誰かがこのタイプのパフォーマンスへのリンクを持っています。

7
Roman Starkov

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf は、さまざまな言語の生産性を実際に直接比較した数少ない研究の1つです。古いものですが、興味深いトピックを見つけた場合は読む価値があります。比較には、記事が非常に正直であるいくつかの主要な欠点があります。

全体的な結果として、低レベル言語(C、C++など)は、書き込みに時間がかかり、メモリを大幅に節約し、実行速度を大幅に向上させることができます。しかし、非常に高い変動性があります。高水準のスクリプト言語は、書くのに半分の時間がかかる傾向があり、アプローチのばらつきが少なくなります。最初は驚くべき程度で、スクリプト言語で何かをする明白な方法がある傾向があります。

Javaのすべてのパフォーマンス数値は、大まかな塩でとらえる必要があることに注意してください。この論文は、人々がJavaについて多くの経験を積む前、およびJVMが十分に最適化される前の90年代に作成されました。 。両方の要素が大きな影響を与えるはずです。

6
btilly

一般的に言えば、Pythonでプログラムを書く方が、C、C++、Javaで同じプログラムを書くよりも通常は速くなります。

また、実行が遅くなる可能性があります。

もちろん、関係する特定のタスクが「よりネイティブに」サポートされているため、他の言語の方が速い特定のアプリケーションがあります。

私はこの速度/生産性の向上を確認するための研究については知りません(1人のコメンターが述べたように、これは正確に測定するのは難しい場合があります)、言語の表現力に関する直接的な研究があります。

言語の表現力とプログラミング速度には相関関係があると思います。単純な反復パターンと、Pythonのforループまたはリストの理解がより簡潔になる方法を想像してください。すぐにすばやく入力できるだけでなく、オフバイワンエラー、範囲外のインデックスなど、コーディングプロセスを大幅に遅くする可能性のある問題の心配もなくなります。

これは、言語の表現比率の推定値を表で示しています。それは一粒の塩で取られるべきですが、それが言及する脚注は非常に価値があります。

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness

1
jon_darkstar