Es gibt ein allgemeines Problem bei dieser Frage, dass sie zu absolut ist. Es ist nicht wirklich sinnvoll zu sagen, "Sprache X ist schneller als Sprache Y". Eine Computersprache selbst ist nicht "schnell" oder "langsam", weil sie lediglich einen Algorithmus ausdrückt. Die eigentliche Frage sollte in der Größenordnung von "Warum ist die Implementierung von X1 der Sprache X schneller als die Implementierung von Y1 der Sprache Y für diese bestimmte Problemdomäne?"
Einige Geschwindigkeitsunterschiede werden sicherlich aus der Sprache selbst herausfallen, da bestimmte Sprachen bestimmte Domänen leichter implementieren können als andere. Aber vieles, was eine Implementierung schnell macht, ist nicht die Sprache. Zum Beispiel kann man nicht wirklich sagen "Python ist langsamer als Java", ohne zu überlegen, ob es sich um CPython, IronPython oder PyPy handelt. Dies gilt insbesondere für Sprachen, die eine VM verwenden, da die Geschwindigkeit direkt von der Qualität der VM abhängt.
Abgesehen davon arbeite ich mit einem System, das JIT auf unserem Gerät aus verschiedenen Gründen nicht mit einer sehr beliebten JavaScript-VM verwenden kann, die es normalerweise unterstützt. Dies bedeutet, dass unser JavaScript sehr viel langsamer läuft als auf einem PC mit einem ähnlichen Prozessor. Diese eine Änderung, die nicht direkt mit der Sprache selbst zusammenhängt, führt dazu, dass JavaScript für die Aufgaben, die uns wichtig sind, "ein paar Mal langsamer als C ++" ist und "Größenordnungen langsamer als C ++" ist.
Bedenken Sie auch, dass Sprachen sich in ihren Leistungsmerkmalen in einer Weise unterscheiden, die nicht direkt vergleichbar ist. Zu viele Benchmarks übersetzen ein Programm nur von Sprache A in Sprache B und berücksichtigen nicht, dass sich die Sprachen in den schnellen Funktionen unterscheiden. (Sie können dies in jedem vernünftigen Benchmark-Vergleich sehen, wie denjenigen, auf die Sie verweisen, da sie häufig Hinweise wie "Dankeschön an so-and-so, dass Sie mir gezeigt haben, wie man es in der Sprache Foo umsetzt.)
Nehmen Sie zum Beispiel diesen Java-Code:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
Es wäre verlockend, dies in C ++ "umzuschreiben" und die Laufzeiten zu vergleichen:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
Die Sache ist, jeder kompetente C ++ - Programmierer wird sofort erkennen, dass dies in C ++ nicht der schnellste Weg ist, etwas zu tun. Sie können die Dinge ganz einfach beschleunigen, indem Sie sie an C ++ anpassen:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
Der Punkt ist nicht, dass C ++ schnell sein kann, aber anstatt Benchmarks zu schreiben, um Sprachen zu vergleichen, ist es wirklich sehr, sehr schwierig. Um es richtig zu machen, müssen Sie ein Experte in beiden Sprachen sein und in beiden Sprachen von Grund auf neu schreiben. Selbst dann können Sie leicht Bereiche erreichen, in denen sich eine Sprache für eine bestimmte Aufgabe auszeichnet. Zum Beispiel kann ich eine Version von Towers of Hanoi in C ++ schreiben, die auf jedem vernünftigen Compiler schneller als Java läuft. Ich kann das tun, indem ich im Wesentlichen betrüge, indem ich C ++ - Vorlagen verwende, die zur Kompilierungszeit ausgewertet wurden (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html).
Der Punkt dort ist nicht, dass ich sagen könnte, dass "C ++ ist schneller als Java", weil mein Programm sofort zurückkehrte, während die Java-Version für Minuten lief (und hoffend, dass niemand bemerkte, dass mein Programm eine halbe Stunde brauchte, um zu bauen.) Der Punkt ist, dass dafür variieren schmalen Fall, C ++ ist schneller. In anderen engen Fällen könnte es umgekehrt sein. Es ist also nicht "C ++ ist schneller", sondern "C ++ ist schneller in Fällen, in denen Sie den Ausdruck zur Erstellungszeit mithilfe von Vorlagen auswerten können." Weniger befriedigend, aber wahr.
Geschwindigkeitsunterschiede in Sprachen betreffen hauptsächlich die Implementierung. Kompilierte Sprachen sind schneller als interpretierte Sprachen. Das Kompilieren in systemeigenen Code wird schneller sein als das Kompilieren in Bytecode. Dies hat weitaus mehr Auswirkungen als Fragen wie, ob die Sprache statisch typisiert ist oder nicht. Und natürlich werden gute Implementierungen schneller als schlechte sein.
Und vergessen Sie nicht, dass gute Programmierer schneller Code produzieren werden als schlechte Programmierer, oft in einem Ausmaß, das die Sprachunterschiede deutlich überwiegt.