Ruby 2.0 als Geschenk zum 20. Geburtstag
Seite 3: Fazit
Dies und das
Einige kleinere, aber nicht unwesentlichere, neue Features, seien am Schluss kurz und kompakt vorgestellt.
- Module#prepend: Laut Core-Developer Yusuke Endoh wird Module#prepend wahrscheinlich eines der zumeist unbewusst genutzten Features werden. Es ersetzt die alias_method_chain in Rails mit einem eindeutigeren Mechanismus unter der Verwendung von Modulen. Derzeit werden Module mit der Anweisung include in einer Klasse benutzt und stellen ihre Methoden zur Verfügung. Methoden der Klasse dürfen Modulmethoden einfach überschreiben, sofern diese per super erreichbar sind. Umgekehrt ist das im Moment noch nicht möglich. An der Stelle kommt die Anweisung prepend ins Spiel. Werden Module über diese Module einer Klasse vorangestellt, überschreiben die Methoden des Moduls die der Klasse, sofern die Klassenmethoden per super erreichbar sind.
- RubyGems 2.0: Zusammen mit dem neuen Ruby wird RubyGems 2.0 ausgeliefert, das einige Verbesserungen des Ruby-Paketsystems mitbringt. Besonders erwähnenswert ist die Unterstützung sogenannter gemdeps-Dateien. Sie enthalten Informationen darüber, welche Gems mit welcher Version für das Ausführen der Anwendung benötigt werden. Der Funktionsumfang ist zwar noch nicht ganz Bundler-konform, bietet aber trotzdem eine einfache Benutzung dieser Dateien. Beispielsweise kann ein gem install aus dieser Datei die benötigten Gems installieren.
- Onigmo als Engine für reguläre Ausdrücke: Bereits mit Ruby 1.9. wurde Onigmo als Engine für reguläre Ausdrücke eingeführt, mit Ruby 2.0 ist sie nun die erste Wahl. Onigmo ist ein Fork von Oniguruma, einer an Perl-Syntax angelehnten RegEx-Bibliothek. In die aktuelle Version von Onigmo sind unter anderem Fixes von Ruby 1.9.3 und Perl 5.10+ eingeflossen. Diese Engine verspricht einige Neuerungen, zum Beispiel bedingte Auswertungen und Nutzung von Rückverweisen. Gabriele Renzi fasst in seinem Blog die Features von Onigmo in Ruby gut zusammen und präsentiert auch einige Beispiele.
Upgrade von Ruby 1.9 auf Ruby 2.0
Im Moment gibt es eine überschaubare Anzahl an Inkompatibilitäten:
- Die Standard-Zeichenkodierung für Ruby-Programme wurde von US-ASCII auf UTF-8 geändert. Es gab bereits in der Testphase mit den Release-Kandidaten Meldungen über ein schlechteres Verhalten der Programme.
- Die iconv-Bibliothek (Konvertierung von einem Encoding in ein anderes) wurde entfernt. Die Entwickler hatten sie bereits in Ruby 1.9 mit der Einführung von M17N ("multilingualization") als "deprecated" markiert. Als Empfehlung gilt hier: "Use String#encode, etc. instead".
- ABI-BrĂĽche: Normalerweise sollte sich das mit der Neuinstallation von Extensions beheben lassen.
Fazit
Das Upgrade auf Ruby 2.0 für bestehende Programme sollte ohne größere Probleme möglich sein, zumindest laut Yusuke Endoh. Es wurde Wert darauf gelegt, dass das neue Ruby nahezu komplett kompatibel zu Ruby 1.9 ist. Da zudem die Gesamtperformance in Ruby 2.0 verbessert wurde, ist ein Upgrade lohnenswert. Der Wunsch des Core-Teams ist es, dass Ruby 1.9.3 so schnell wie möglich abgelöst werden kann.
Zum Schluss bleibt noch die Frage offen, wie das populäre Webframework Ruby on Rails mit einer neuen Ruby-Version umgeht? Wenig überraschend ist die Antwort, dass die zukünftige Version von Ruby on Rails (4.0), die mindestens Ruby 1.9.3 verlangt, den Einsatz von Ruby 2.0 empfiehlt.
Tim Keller
arbeitet als Senior Consultant bei der innoQ Deutschland GmbH.
Christian Albrecht (@coastalchief)
arbeitet als Principal Consultant bei der innoQ Deutschland GmbH. Ruby und Ruby on Rails sind seine bevorzugten Waffen, wenn es um die Realisierung von Webanwendungen geht.
(ane)