この質問には、絶対的すぎるという一般的な問題があります。「言語Xは言語Yよりも速い」と言っても意味がありません。コンピューター言語自体は、アルゴリズムを表現する方法に過ぎないため、「高速」でも「低速」でもありません。実際の質問は、「言語Xの実装X1が、この特定の問題ドメインの言語Yの実装Y1よりも速いのはなぜですか」という順序の何かであるべきです。
特定の言語は他の言語よりも特定のドメインを実装する方が簡単であるため、速度の違いは確かに言語自体から外れます。しかし、実装を高速化するものの多くは言語ではありません。たとえば、CPython、IronPython、またはPyPyのいずれについて話しているかを考慮せずに、「PythonはJavaよりも遅い」と言うことはできません。これは、速度がVMの品質によって直接影響を受けるため、VMを使用する言語に特に当てはまります。
余談ですが、私はさまざまな理由で、通常はサポートしている非常に人気のあるJavaScript VMを使用してデバイスでJITを使用できないシステムを使用しています。これは、JavaScriptがはるかに遅く、同様のプロセッサを搭載したPCで実行するよりもはるかに遅いことを意味します。言語自体に直接関係しないこの1つの変更により、JavaScriptが「C ++よりも数倍遅い」から「C ++よりも桁違いに遅い」ものになります。
また、言語は、直接比較できない方法でパフォーマンス特性が異なることも考慮してください。ベンチマークが多すぎると、プログラムが言語Aから言語Bに変換されるだけで、どの機能が高速であるかによって言語が異なることは考慮されません。(リンク先のような合理的なベンチマーク比較でこれを見ることができます。多くの場合、「言語Fooでそれを実装する方法を示してくれてありがとう」のようなメモがあります。)
たとえば、次のJavaコードを使用します。
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
C ++でこれを「書き換え」て実行時間を比較するのは魅力的です。
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
問題は、有能なC ++プログラマなら誰でもすぐにC ++ではこれが何かをする最速の方法ではないということです。C ++により適したものに変更することで、簡単に速度を上げることができます。
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
ポイントは、C ++が高速であるということではありませんが、言語を比較するためのベンチマークを作成するよりも本当に難しいです。適切に行うには、両方の言語の専門家であり、両方の言語でゼロから作成する必要があります。それでも、特定のタスクで1つの言語が得意な分野に簡単に出くわすことができます。たとえば、妥当なコンパイラでJavaよりも高速に実行されるC ++でハノイの塔のバージョンを書くことができます。コンパイル時に評価されるC ++テンプレートを使用して、基本的にチートすることでそれを行うことができます(http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html)
ポイントは、「C ++はJavaより速い」とは言えないということではありません。なぜなら、Javaバージョンが数分間実行されている間、プログラムが即座に戻ったからです大文字小文字が異なる場合、C ++の方が高速です。他の狭いケースでは、逆の場合があります。したがって、「C ++は高速」ではなく、「テンプレートを使用してビルド時に式を評価できるインスタンスではC ++が高速」です。満足度は低いが、真実。
言語の速度の違いは、主に実装に関するものです。コンパイルされた言語は、インタープリター言語よりも高速になります。ネイティブコードへのコンパイルは、バイトコードへのコンパイルよりも高速になります。これは、言語が静的に入力されるかどうかなどの質問よりもはるかに効果があります。そしてもちろん、良い実装は悪い実装よりも速くなるでしょう。
そして、優れたプログラマーは、悪いプログラマーよりも高速なコードを作成することを忘れないでください。多くの場合、言語の違いをかなり上回る程度です。