Die Schlacht der Sprachen und Systeme

 

Im nachfolgenden Artikel stelle ich die ganz einfache Frage "Wie schnell ist welche Programmiersprache, auf welchem System, mit welchem Tool?"

Begonnen hat die Suche nach der Antwort auf die Frage (sie lautet hier nicht 42!^^), wie schnell sind denn eigentlich die nativen Java-Compiler?! Also nicht die Wald- und Wiesen JDK's, mit welchen man sonst so, seine Java Programme auf die Welt los lässt, sondern die Tools, die aus "weichem" Bytecode, so richtig schnelle, "harte", native EXE-Dateien basteln. Also eben echte Programme, für echte Programmierer.^^

Und so kommt man unweigerlich zu GNU GCJ, dem Java Compiler von GNU oder dem Excelsior JET, welche beide native, ausführbare Dateien (.exe) aus Java-Klassen erstellen können. Und von diesen dann natürlich zu weiteren nativen AOT-Compilern, wie dem GNU C++ für die unixoide und Visual C++ für die Windows-Welt, XCode für ObjC unter Apple Mac OSX, usw. Und von da ist es natürlich nur noch ein weiterer kleiner Hops, gleich auch noch alle anderen Sprachen analytisch betrachten zu wollen. (Pascal/Delphi, VB, VC++, Python, Smalltalk, JavaScript, usw.)

Ein Blick ins Internet offenbart zwar den einen oder anderen Test mit ähnlichem Ziel, nur wurden entweder nicht alle Sprachen in gleicher Form getestet oder die "Codings" so dermaßen ins Groteske verschoben, weil natürlich jeder Entwickler seine persönliche, heissgeliebte Sprache an 1. Stelle sehen wollte. Und so wurden dann teilweise "extrem optimierte" Codestellen eingefügt, die so im täglichen Leben von 99% aller Entwickler nie eingesetzt werden.

Aber genau das möchte ich mit diesem Test vermeiden! Deswegen werden hier nur Code-Schnipsel getestet, wie ich diese im täglichen Entwicklerleben draußen in den Projekten permanent erlebe. Denn dort schreiben die Wenigsten hoch optimierten, performanten Code, sondern da zählt das Tagesgeschäft, da zählt Termindruck und oftmals eine Mischung aus unterschiedlichsten Entwicklern in chaotischen Teams, die sich zeitweise selbst im Wege stehen oder einfach nur zu faul oder zu unwissend für besseres Coding sind. Die nackte, harte Wahrheit ist, der täglich erstellte Code ist meist nur schludrig!

Nun stellt sich aber die Frage, in wieweit kommen dann die versch. Compiler / Laufzeitumgebungen mit diesem Alltags-Coding zurecht? Wieviel kann noch durch den Compiler optimiert werden oder besser, wird denn überhaupt noch optimiert?

Und genau deswegen verwende ich für die nachfolgenden Tests einen einfachen, normalen, kleinen, "atomaren" Code, der alltägliche Funktionalität, wie sie in zig Millionen Funktionen in ähnlicher Weise vorkommt, in sich vereint. Also eine kleine, bunte Mischung aus ganzzahligen und Gleitkomma-Operationen, Schleifen, dynamische Arrays, Textverknüpfungen mit Typumwandlungen, Klassen und -Funktionsaufrufen.

Zu guter Letzt war mir für diese Analyse wichtig, dass sich der Code möglichst problemlos und gleichwertig auf möglichst viele unterschiedliche Sprachen migrieren lässt. Dieser Test gleicht somit in gewissem Maße dem Stein von Rosett. Er übersetzt den selben Inhalt so gut es geht in unterschiedliche Sprachen und Welten.^^

 

Inhaltsverzeichniss

  1. Die Tools
  2. Der Code
  3. Der Test
  4. Die Bugs
  5. Das Ergebnis
  6. Das Fazit