25 Stimmen

Sprachen schneller als C++

Es heißt, dass Blitz++ Folgendes bietet Fast-Fortran-Leistung .

Ist Fortran bei vergleichbaren Aufgaben tatsächlich schneller als normales C++?

Was ist mit anderen HL-Sprachen mit außergewöhnlicher Laufzeitleistung? Ich habe von ein paar Sprachen gehört, die C++ bei bestimmten Aufgaben übertreffen... Objective Caml, Java, D...

Ich denke, GC kann viel Code machen schneller weil es das übermäßige Kopieren auf dem Stapel überflüssig macht? (vorausgesetzt, der Code ist no für die Aufführung geschrieben)

Ich frage aus Neugier - ich bin immer davon ausgegangen, dass C++ so gut wie unschlagbar ist, es sei denn, man ist Experte für ASM-Programmierung.

2voto

Tim Matthews Punkte 4923

Das hängt stark vom Compiler und den Programmierern ab, ob er gc hat und kann sehr unterschiedlich sein. Wenn es direkt in Maschinencode kompiliert ist, dann erwarten Sie eine bessere Leistung als interpretiert die meiste Zeit, aber es gibt eine endliche Menge an Optimierung möglich, bevor Sie asm Geschwindigkeit sowieso haben.

Wenn jemand sagt, dass Fortran etwas schneller ist, würden Sie dann trotzdem ein neues Projekt in Fortran programmieren?

2voto

rama-jka toti Punkte 1374

Sie müssen einen seltsamen verwalteten XML-Parser verwenden, wenn Sie diese Seite laden :)

Wir erstellen laufend Profile für unseren Code, und der Gewinn ist konstant (und das ist kein naives C++, sondern einfach modernes C++ mit Boos). Es durchgängig ebnet jede CLR-Implementierung um mindestens 2x und oft um 5x oder mehr. Ein bisschen besser als Java Tage, wenn es etwa 20x mal schneller war, aber Sie können immer noch gute Instanzen zu finden und einfach zu beseitigen alle System.Object bloat und eindeutig schlagen sie zu einem Brei.

Eine Sache, die verwaltete Entwickler nicht verstehen, ist, dass die Hardware-Architektur gegen jede Skalierung von VM- und Objekt-Root-Ansätzen ist. Sie müssen es sehen, um es zu glauben. Warten Sie, starten Sie einen Browser und gehen Sie zu einer "dünnen" VM wie Silverlight. Sie werden schockiert sein, wie langsam und CPU-hungrig es ist.

Zwei, Kick einer Datenbank-App für jede Leistung, ja verwaltet vs native db.

1voto

Anthony Punkte 5038

In der Regel ist es der Algorithmus und nicht die Sprache, der bestimmt, in welchem Leistungsbereich Sie am Ende landen werden.

Innerhalb dieses Rahmens können optimierende Compiler in der Regel besseren Code erzeugen als die meisten Assembler-Programmierer.

Vorzeitige Optimierung ist die Wurzel allen Übels

Dies mag das "Allgemeinwissen" sein, das jeder nachplappern kann, aber ich behaupte, dass es wahrscheinlich deshalb so ist, weil es richtig ist. Ich warte auf konkrete Beweise für das Gegenteil.

1voto

Skizz Punkte 66931

C# ist viel schneller als C++ - in C# kann ich einen XML-Parser und Datenprozessor in einem Zehntel der Zeit schreiben, die ich für C++ benötige.

Oh, Sie meinen die Ausführungsgeschwindigkeit?

Selbst dann ist C# wahrscheinlich immer noch schneller als C++, wenn man die Zeit von der ersten geschriebenen Codezeile bis zum Ende der ersten Ausführung des Codes betrachtet.

Dies ist ein sehr interessanter Artikel über die Konvertierung eines C++-Programms in C# und den Aufwand, der erforderlich ist, um das C++-Programm schneller zu machen als das C#-Programm.

Wenn man also die Entwicklungsgeschwindigkeit berücksichtigt, ist fast alles besser als C++.

OK, um auf die reine Laufzeitanforderung des Auftraggebers einzugehen: Es liegt nicht an der Sprache, sondern an der Umsetzung der Sprache die die Laufzeitleistung bestimmt. Ich könnte einen C++-Compiler schreiben, der den langsamsten Code erzeugt, den man sich vorstellen kann, aber es ist immer noch C++. Theoretisch ist es auch möglich, einen Compiler für Java zu schreiben, der auf IA32-Befehle und nicht auf die Bytecodes der Java-VM abzielt, was einen Geschwindigkeitsschub zur Laufzeit bedeutet.

Die Leistung Ihres Codes hängt von der Übereinstimmung zwischen den Stärken der Sprache und den Anforderungen des Codes ab. Zum Beispiel wird ein Programm, das viele Speicherzuweisungen und -freigaben vornimmt, in einem naiven C++-Programm schlecht abschneiden (d. h. den Standard-Speicherzuweiser verwenden), da die C++-Speicherzuweisungsstrategie zu allgemein ist, während der GC-basierte Zuweiser von C# besser abschneiden kann (wie der obige Link zeigt). Die Manipulation von Zeichenketten ist in C++ langsam, in Sprachen wie PHP, Perl usw. jedoch schnell.

1voto

dsimcha Punkte 65784

D kann in praktischen Anwendungen manchmal schneller sein als C++, vor allem weil das Vorhandensein von Garbage Collection hilft, den Overhead von RAII und Referenzzählung bei der Verwendung von Smart Pointers zu vermeiden. Für Programme, die große Mengen kleiner Objekte mit nicht-trivialen Lebenszyklen zuweisen, kann die Garbage Collection schneller sein als die Speicherverwaltung im C++-Stil. Außerdem ermöglichen die eingebauten Arrays von D dem Compiler in einigen Fällen bessere Optimierungen als die STL-Vektoren von C++, die der Compiler nicht versteht. Darüber hinaus unterstützt D2 unveränderliche Daten und reine Funktionsannotationen, auf deren Grundlage neuere Versionen von DMD2 optimieren. Walter Bright, der Schöpfer von D, hat einen JavaScript-Interpreter sowohl in D als auch in C++ geschrieben, und seiner Meinung nach ist die D-Version schneller.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X