Die Programmiersprache Ruby

Blog| Forum| Wiki  

Inhaltsverzeichnis

Vorteile kompilierter Sprachen

Der größte Vorteil kompilierter Sprachen liegt in der Ausführungsgeschwindigkeit. Da die Programme bereits im nativen Maschinencode vorliegen, entfällt ein etwaiger Zwischenschritt durch einen Interpreter oder ähnlichem. Kompilierte Sprachen sind außerdem meistens typsicher (typesafe), d.h. bei Variablen ist immer zu deklarieren, welchen Typ sie besitzen.
Ein weiterer Vorteil kompilierter Sprachen besteht in der Zeigerarithmetik. Diese erlaubt entsprechend erfahrenen Programmierern, sehr effizienten Code zu entwickeln, dessen Ausführungsgeschwindigkeit von interpretierten Sprachen meistens unerreicht bleibt, jedoch von Menschen im Allgemeinen auch schwieriger zu lesen ist. Außerdem liegt dadurch die Speicherverwaltung meistens in der Hand des Programmierers, wo (entsprechend erfahrene) Programmierer wiederum speichereffiziente Programme schreiben können.
Kompilierte Sprachen sind auch dann vonnöten, wenn z.B. ein Treiber entwickelt werden muss, eine Aufgabe, die in High-Level-Programmiersprachen nur schwer und mit großen Performanceverlusten gelöst werden kann.

Nachteile kompilierter Sprachen

Der größte Nachteil von kompilierten Sprachen ist einerseits die Zeigerarithmetik (sofern die Sprache diese bietet), und andererseits das Kompilieren der Programme an sich. Des Weiteren ist bei manchen Sprachen die Syntax noch sehr nahe an Assembler angelehnt (siehe C).
Das Problem der Zeigerarithmetik liegt darin, dass unachtsamer Umgang einerseits zu großen Sicherheitslöchern führen kann (besonders offensichtlich bei null-terminierten Strings, wie sie z.B. in C verwendet werden) und andererseits der direkte Umgang mit Zeigern zu Fehlern im Programm selber führen kann (Stichwort null-Zeiger). Und unachtsamer Umgang mit der Speicherverwaltung kann oft zu Speicherlecks führen.
Kompilierte Programme müssen (wie der Name bereits sagt) vor ihrer Ausführung kompiliert werden. Dies geschieht durch einen Compiler, der das Programm übersetzt. Dies dauert je nach Länge des Programms mehr oder weniger lange, aber selbst das Kompilieren kurzer Programme dauert merkbar lang ( > 2 sec ). Dazu kommt vor allem bei komplexeren Programmen, dass diese noch gelinkt werden müssen, wobei etwaige Fehler oft in etwas kryptischen Fehlermeldungen resultieren.
Dieser Umstand ist besonders dann unangenehm, wenn man nur kleine Änderungen an einem Programm vornimmt und diese dann gleich testen will. Dieser sog. Write-Compile-Run-Zyklus kann zu mehr oder wenigen großen Verzögerungen bei der Entwicklung eines Programms führen.

Vorteile Scriptsprachen

Ihre Syntax ist oft nahe an menschliche Sprachen angelehnt (mit der unrühmlichen Ausnahmen von Perl), wodurch auch ungeübte Programmierer sich schnell in Programme einlesen können. Des weiteren bieten sie oft syntaktische Elemente, die Low-Level-Programmiersprachen meistens nur über Libraries bieten können - bestes Beispiel sind built-in Hash-Arrays (oder Assoziatives Array). Scriptsprachen sind meistens Typlos (typeless) - was einerseits ein Vorteil ist (der Programmierer muss sich nicht um etwaige Konvertierungen kümmern) und ein Nachteil sein kann (der Typ einer Variable ist nicht unbedingt bekannt). Dies hängt auch sehr mit der Philosophie zusammen, die hinter einer Programmiersprache steht - in Ruby vor allem Duck Typing, das die Typlosigkeit einer Variablen in den Mittelpunkt stellt.
Scriptsprachen bieten oft auch eingebaute Speicherverwaltung (genannt Garbage Collection) und bieten keine Zeigerarithmetik.
RAD (Rapid Application Development) stützt sich oft auch auf Scriptsprachen, da durch den wegfallenden Kompilierschritt Änderungen leicht getestet werden können.

Nachteile Scriptsprachen

Besonders bei rechenintensiven Aufgaben wird der Geschwindigkeitsnachteil von Scriptsprachen deutlich - hier existieren diverse Techniken, die versuchen, diesen Nachteil zu umgehen. Darunter fallen Runtime-Optimizing, das Übersetzen in Bytecode, die Interpretierung durch eine Virtual Machine oder das Schreiben kritischer Routinen in einer Low-Level Sprache (in Ruby ist dies z.B. über InlineC möglich, das es dem Programmierer erlaubt, Ruby mit C Code zu mischen).
Ausserdem "unterstützen" manche Sprachen durch ihre Syntax das Erstellen von unleserlichen Programmen - Perl sei hier wieder einmal als Beispiel genannt - aber auch Ruby verführt manchen zur Syntax-"Überzuckerung".

Die Kombination

Am besten sind dann kompiilierte Scripts. Sie entkräften das Argument der Geschwindigkeit. Im Gegensatz zu kompiilierten Programmen werden die Scripts allerdings erst kurz vor Anwendung in Maschinensprache übersetzt. Das ermöglicht eine weite Flexibilität und Programmierfehler können schon vor Ausführung des Scripts gefiltert werden.