Die Programmiersprache Ruby

Blog| Forum| Wiki  

Inhaltsverzeichnis

Relevanz

An Java kommt man derzeit als ernstzunehmender Entwickler nicht vorbei. Das Momentum im Java-Bereich ist ungebrochen. Java ist strategische Plattform der meisten großen Spieler im Markt, einzig C# kann da mithalten (siehe TIOBE Programming Community Index).

Ruby ist im Vergleich dazu als Nischensprache zu sehen, von der viele Manager und selbst das Gros der deutschen Programmierer bis zum heutigen Tage noch nie etwas gehört haben. Auch Ruby als Skriptsprache für Java-Programmierer spielt eine untergeordnete Bedeutung. Etwa 3/4 der Java-Programmierer greifen - wenn überhaupt - stattdessen zu Jython und dann gibt es ja auch noch Groovy und Nice (Quelle: ct, Ausgabe ??).

Typisierung

Java ist streng typisiert. Die Typisierung ist größtenteils statisch. Es gibt aber Typfehler, die erst zur Laufzeit gefunden werden. Insbesondere mussten Entwickler bis Java 5 sehr oft explizit Casten, d. h. den vermuteten Laufzeit-Typ selbst benennen. Typen in Java sind Klassen und Interfaces. Mit Java 5 wurde der Compiler mit Generics und Autoboxing aufgebohrt.

Ruby setzt im Gegensatz dazu vollständig auf dynamische Polymorphie. Der Typ einer Variablen steht erst zur Laufzeit fest. Typen sind dabei immer Klassen. Mixins sind Rubys Antwort auf Generics und Interfaces.

Soweit die Theorie. Businessanwendungen in Java sind meist mit J2EE erstellt. Dieses Framework bricht in weiten Teilen mit der statischen Typisierung. Enterprise Java Beans werden als entfernte Objekte über eine Namenssuche erst zur Laufzeit gefunden. Im Code stehen dann Strings und keine Klassen, was dann nebenbei auch noch Refactorings erschwert. Dazu kommt dann noch ein aufwändiges und fehleranfälliges Deployment.

Siehe auch ThemaWebEntwicklung und ThemaDistributedRuby.

Laufzeitumgebung

Die Java Laufzeitumgebung ist ein von Sun geschaffener Standard. Die Virtuelle Maschine (VM) ist ein sogenannter Bytecode-Interpreter, d. h. es wird von einem Compiler erzeugter Zwischencode interpretiert. Es gibt Umgebungen verschiedener Hersteller. Es ist mindestens eine Virtuelle Maschine mit Just-In-Time Compilation und Hot-Spot-Technik verfügbar (siehe Java_HSpot). Bis VM Version 1.3 gab es Kritik an der Performanz der Virtuellen Maschine. Als schnelleste Implementation galt ausgerechnet die von Microsoft mitgelieferte Variante, die jedoch als Ergebnis mehrerer Rechtsstreitigkeiten nicht mehr weiterentwickelt wird. Aktuelle Java-Implementationen sind, sofern man das so pauschal sagen kann, ausreichend schnell.

Für Ruby gibt es derzeit einen in C geschriebenen, vergleichsweise langsamen Interpreter. Performanzengpässe können durch Auslagerung in C-Routinen ausgeglichen werden. An Ruby 2 wird jedoch gearbeitet. JRuby erlaubt die Ausführung reinen Ruby-Codes in der Java-VM, Erweiterungen bleiben außen vor.

Entwicklungsumgebung

Java wird zwar kompiliert, die Turn-Around-Zeiten sind trotzdem bemerkenswert kurz. Das liegt daran, dass aktuelle Entwicklungsumgebungen wie Eclipse einen inkrementellen Compiler verwenden. Java-Programmierer können auf ein phänomenales Arsenal an Werkzeugen zurückgreifen, die viele auf den ersten Blick lästig erscheinende Sprachspezifika in den Hintergrund treten lassen.

Unter Ruby-Programmierern ist es mangels derart ausgereifter Entwicklungsumgebungen noch weit verbreitet, auf vim oder Emacs zurückzugreifen. Es tauchen aber bereits die ersten kommerziellen Entwicklungsumgebungen auf und sowohl die Integration in Eclipse als auch das in FXRuby geschriebene FreeRIDE werden weiterentwickelt.

Deployment

Das Thema Deployment spielt mit in das Thema Entwicklung hinein. In einem J2EE-Umfeld sind typischerweise eine Menge XML-Dateien zu editieren. Außerdem müssen spezielle Archiv-Files (Jar, Ear, War, etc.) erzeugt werden. Das alles kann entweder über in die Entwicklungsumgebung integrierte Plugins erfolgen, oder man verwendet ein Deploy-Tool des Application-Server-Anbieters. Für kleine Standalone Anwendungen reicht es aus, Ant zu beherrschen. Mit Webstart wird das Thema Updates adressiert.

In Ruby entwicklet sich RubyGems zum Deployment-Standard. Auch das Webframework RubyOnRails oder der Continuus-Intagration-Server Damagecontrol kommen als Gems daher (letzteres verwendet gar ersteres). In Kombination dazu bieten sich Rant und Rake als Build-Werkzeuge an.

Daneben gibt es sowohl in Java als auch in Ruby die üblichen, plattformabhängigen Lieferstrategien, etwa Windows-Installer oder Debian-Pakete.

Vererbung

Java erlaubt wie Ruby nur einfache Vererbung. In Ruby kann man Mehrfachvererbung z. T. über Mixins emulieren, in Java kann man nur deklarieren, welche Interfaces eine Klasse implementiert.

In Java führt diese Einschränkung dazu, dass generative Programmierkonzepte wie Aspektorientiertes Programmieren und Generics breiter diskutiert und eingesetzt werden.