Schnelle Sprache

Wenn es in einer Diskussion darum geht, welcher Sprache die beste ist, kommt oft das Argument. x ist viel schneller als y, aber meist sind das nur Behauptungen. Sicherlich stimmt das auch oft, aber mich interessiert ob es Möglichkeiten gibt dass zu messen oder es wirklich Rankings gibt die auf mehr als dem Gefühl des Anwenders basieren. Hat da einer schon mal was zu gefunden?
 
Also ich hätte mit C/C++ geantwortet. Aber wie wir alle Wissen ist (X)ASM die Maschinennahste und schnellste Sprache, die aber nicht so angesehen ist weil man eine Zeit braucht um den Code zu verstehen in C/C++ versteht man aber alles viel schneller und ggf. viel besser. Es kommt natürlich auch auf den Programmierer an, also damit meine ich: "Wie Optimal programmiert er eigentlich? Nimmt er umwege oder geht durch eine gerade Linie zum Ziel?"

Wenn ein Programmierer sich sehr gut mit Zeigern in C/C++/ASM auskennt, kann keine andere Sprache mithalten.

Gruß
Keci
 
Die Endgeschwindigkeit hängt von der Hardware, dem Betriebssystems, dem Compilers, dem Algorithmus und dessen Implementation ab. Je nach Anwendungszweck kann eine Sprache also schneller sein als eine andere. Wenn man brauchbare Testergebnisse will muss man also die Ausführungszeit verschiedener Programme unter gleichen Bedingungen testen. Google mal nach programming language benchmark o.Ä. da wirst du sicher fündig. Die Geschwindigkeit (Komplexität) von Algorithmen lässt sich theoretisch berechnen zb n^2 > n*log n.
 
Original von Keci
Aber wie wir alle Wissen ist (X)ASM die Maschinennahste und schnellste Sprache

[...]

Wenn ein Programmierer sich sehr gut mit Zeigern in C/C++/ASM auskennt, kann keine andere Sprache mithalten.

Naja, der C++-Compiler setzt das ja auch in Maschinencode um und kann da auch noch eine Menge optimieren, und in diesen Optimierungen, zu denen der Compiler in der Lage ist, stecken auch viele Jahre an Programmiererfahrung drin, so dass man wirklich ein sehr geübter ASM-Programmierer sein muss, um da mithalten zu können :)

Eine Google-Suche hat übrigens diese Benchmark-Seite ergeben (hier gleich mit GNU g++ vs. Java)

http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=gpp&lang2=javaxint
 
Ich finde für kleinere Programme reicht TCL/TK. Es ist wesentlich einfacher zu erlernen und umzusetze. Ausserdem braucht man vieel weniger Quuellcode um die Gleiche Abfolge wie in C/C++ wiederzugeben. Mit Größeren und Umfangreicheren Programmen habe ich keine Erfahrung, kann also in nicht behaupten das TCL/TK in diesem Bereich irgentwie besser zu Handhaben ist.
 
Ich weise darauf hin, dass das kein Thread werden soll wo jeder seine subjektive Meinung abgibt nach dem Motto X ist zwar etwas schneller als Y aber Y ist einfacher zu lernen und schneller als... Es geht um Messmethoden und Benchmarks, nur so als Anmerkung ;)
 
Hallo,
naja eigentlich ist nicht die Sprache dran schuld, dass Programme damit schneller oder langsamer sind, sondern der Compiler.
Sicher, bei Sachen wie Java oder PHP die interpretiert werden, kann man nicht die gleiche Geschwindigkeit haben wie mit C. Wenn man aber PHP beispielsweise kompiliert, könnte man die gleiche Geschwindigkeit haben wie z.B. C/C++.

Denn es ist meist entscheidend, wie gut die Compiler für die Sprache sind, wie intelligent diese den Code optimieren und damit wie schnell der Programmcode ist.

Sicher, es spielt eine Rolle wie nah die Programmiersprache an Maschinenebene ist, denn dann lässt sich der Compiler erheblich leichter programmieren und der erzeugte Maschinencode kann vom Compiler erheblich besser optimiert werden. Je weiter man sich von der Maschinensprache entfernt, desto schwieriger wird das Compileren, desto allgemeiner muss der Compiler übersetzen und umso langsamer wird der Code. Ebenso ist manche Syntax förderlicher bzgl. Performance als andere. Wenn man Berechnungen nur in umgekehrter polnischer Notation angebenen könnte, wäre dies für den Compiler erheblich angenehmer und das resultierende Prog. deutlich schneller. Aber der Programmierer schreibt lieber 2*3+4 statt 2 3 * 4 +.
Ähnlich bei anderen Sprachkonstrukten.

Aber: Für einfache Berechnungen könnte ein PHP Script genauso schnell sein wie ein C Programm, sofern man für PHP einen Compiler einsetzt.

Deswegen lassen sich Sprachen oft nur bedingt vergleichen, man muss immer beachten welchen Compiler man nutzt.
Sprachen für die es nur einen ('Standard') Compiler gibt (z.B. Java, C#, PHP) lassen sich deswegen erheblich leichter vergleichen. Auch kann man z.B. Java mit C vergleichen etc.
 
@Stein,
meinst du die Zeit die es dauert ein Programm zu schreiben??
oder meinst du die Zeit die das System braucht das Programm zum laufen zu bringen, es zu unterhalten u.s.w.?
 
@niko: nein ich meine echte berechnungszeit. Zeit zum coden hängt ja hauptsächlich davon ab wie geübt man ist.

und dass da meine Hardware das wichtigste ist ist mir klar nur geht es um den Vergleich auf dem selben PC.
 
es kommt ja auch auf die spezialisierung der sprache an. C, C++, Java etc. sind ja eher universalsprachen. Snobol z.B wurde speziell zu stringverarbeitung entwickelt und ist in dieser hinsicht relativ schnell.
 
Original von Elderan
Sicher, es spielt eine Rolle wie nah die Programmiersprache an Maschinenebene ist, denn dann lässt sich der Compiler erheblich leichter programmieren und der erzeugte Maschinencode kann vom Compiler erheblich besser optimiert werden. Je weiter man sich von der Maschinensprache entfernt, desto schwieriger wird das Compileren, desto allgemeiner muss der Compiler übersetzen und umso langsamer wird der Code.

Das stimmt so nicht immer. Es hängt auch viel davon ab, wie die Sprache aufgebaut ist, d.h. statisch typisiert/dynamisch typisiert, da in ersterem Fall der Compiler viel mehr Annahmen über den Code machen kann und z.B. keine Typprüfungen zur Laufzeit einbauen muss.
Als Beispiel könnte man hier Haskell anführen, was enorm "maschinenfern" ist(rein funktional, d.h. keine (destruktiven) Zuweisungen, Funktionswerte hängen nur von ihren Parametern ab, zahlreiche, sehr abstrakte Konstrukte, wie etwa Funktoren, Monaden) und dennoch durch die einen sehr ausgefeilten Compiler(möglich durch das strenge Typsystem) in Geschwindigkeitsregionen in der Nähe von recht maschinennahen Sprachen kommt, besonders da Parallelisierung bei einer solchen Sprache recht einfach ist:
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=all
http://cgi.cse.unsw.edu.au/~dons/blog/2007/11/29#smoking-4core
Folglich ist nicht so sehr entscheidend, wie abstrakt die Sprache ist, sondern eher wie sie in anderer Hinsicht aufgebaut ist(Typsystem, usw.) ist.

Original von Stein
Zeit zum coden hängt ja hauptsächlich davon ab wie geübt man ist.
Das würde ich sehr stark bezweifeln: Versuche einmal das selbe Projekt in, z.B. Assembly umzusetzen und danach in Python. Selbst wenn du in beiden Sprachen den selben Übungsgrad hast, wird ersteres wesentlich länger dauern, da dir Assembly kaum Möglichkeiten gibt, gleiche Strukturen zu abstrahieren und somit weniger Code zu schreiben. Als Nebeneffekt hat dies natürlich auch noch mehr Bugs und größeren Aufwand beim Suchen selbiger zufolge.
 
Hier mal ne kleine übersicht auf einem Pentium 133,

(1)n-Damen-Problem (n = 10)
(2)Newton-Verfahren wurzel?(1) bis wurzel?(1000)
Sprache (1) (2)
C 0.4s -
Perl 43.2s 0.287s
Python 94.1s 0.734s
Tcl 146.5s 0.499s
 
Hier gibt es auch noch einen interessanten Link von fefe. Passt thematisch glaube ich ganz gut in diesen Thread.

Man sollte sich außerdem immer im Hinterkopf behalten dass schnelle und solide Algorithmik immer mehr ausmacht als die Programmiersprache und die Hardware. Quicksort implementiert in Perl wird bei großen n schneller sein als Bubblesort implementiert in C bei gleich großen n. Deswegen eignen sich stark optimierte Bibliotheken wie zum Beispiel die boost sehr gut um performanten, aber dennoch sehr lesbaren und hochleveligen Code zu schreiben.
 
@niko :
Programmiersprachen die schnell zu schreiben sind sind meistens langsamer beim ausführen da diese stärker vom Maschienencode abweichen als andere
 
Original von bad_alloc
Ich nehme an das schnellstmögliche ist hochoptimierter handgeschriebener maschinencode. so wie hier geschildert.

Aufgrund der zunehmenden Komplexität wird es jedoch zunehmend schwerer, besser als ein Compiler zu optimieren, da es schwierig ist alle möglichen Optimierungsdetails(Pipelining, etc.) im Hinterkopf zu behalten. Ich wage mal zu behaupten, dass für hinreichend komplexen Code, es heute schon enorm schwer ist, gcc noch zu schlagen.
 
Ganz interessant ist in Sachen Programmierer-Faktor ist der Projekt Euler Thread mit der Primzahl-Aufgabe. Teilweise gigantische Unterschiede.

Generell wage ich zu behaupten, dass gesetzt den Fall der perfekten Optimierung gilt: Low-Level Sprache (ASM, FORTRAN, etc.) > Hochsprache (C/C++ etc.) > BASIC Sprache (3DGC, Blitzbasic, AutoIT?...) > Interpretersprache/Scriptsprache. (PHP, unkompiliertes Java)
Kompiliertes Java könnte dann evtl. als Hochsprache betrachtet werden, oder?
 
Zurück
Oben