Geschrieben von Quintus am 24.2.2013
Wir sind höchst erfreut, heute, am 20. Geburtstag von Ruby, die Veröffentlichung von Ruby 2.0.0-p0 ankündigen zu können. Ruby 2.0.0 ist das erste stabile Release der 2.0er Serie, mit zahlreichen neuen Features und Verbesserungen als Antwort auf die steigenden und expandierenden Ansprüche an die Programmiersprache Ruby.
Haben Sie viel Freude an der Programmierung mit Ruby 2.0.0!
Was ist Ruby 2
Neue Features
Ein paar der Höhepunkte:
- Sprachkern:
- Benannte Parameter, die API-Design Flexibilität geben
- Module#prepend ermöglicht neue Wege, Klassen zu erweitern
- Ein neues Literal
%i
, das ein Array von Symbolen erzeugt __dir__
gibt den Verzeichnispfad der aktuell ausgeführten Datei zurück- UTF-8 ist nun die Standardkodierung, wodurch der magische Kommentar nun weggelassen werden kann
- Eingebaute Bibliotheken:
- Enumerable#lazy und
Enumerator::Lazy
, für (durchaus unendliche) lazy Streams - Enumerator#size und Range#size, für lazy Größenfeststellung
- #to_h, die neue Konvention zur Konvertierung in einen Hash
- Onigmo, die neue Engine für Reguläre Ausdrücke (ein Fork von Oniguruma)
- Asynchrones API zum Behandeln von Exceptions
- Enumerable#lazy und
- Debugging-Unterstützung
- Unterstützung von DTrace, sodass Runtime-Diagnosen in Produktion möglich werden
- TracePoint, ein verbessertes Tracing-API
- Performanzverbesserungen:
- GC-Optimierung durch Bitmap Marking
- Optimierungen an Kernel#require, wodurch sich die Startzeit von Rails drastisch verringert
- Optimierungen an der VM, etwa am Methoden-Dispatch
- Optimierungen bei der Gleitkommazahlberechnung
Darüberhinaus enthält 2.0.0 Refinements zur Erweiterung von Rubys Modularität, allerdings als experimentelles Feature. Für noch mehr, siehe die NEWS.
Kompatibilität
Wir haben auch darauf geachtet, 2.0.0 kompatibel zu 1.9 zu designen, daher sollte es einfacher sein, von 1.9 auf 2.0 zu migrieren, als damals von 1.8 auf 1.9 (die auffälligen Inkompatibilitäten werden weiter unten beschrieben).
Tatsächlich sind, dank der bemerkenswerten Arbeit Dritter, einige populäre Anwendungen wie Rails und tDiary bereits erfolgreich auf die Release-Candidates von 2.0.0 portiert worden.
Dokumentation
Es gibt zahlreiche Verbesserungen an der Dokumentation, was viele Rubyisten gefordert haben. Wir haben riesige Berge von RDoc für Module und Methoden geschrieben; insgesamt ist 2.0.0 zu rund 75% dokumentiert, wohingegen 1.9.3 nur zu etwa 60% abgedeckt war. Daneben gibt es nun eine Beschreibung von Rubys Syntax, einsehbar mit:
Stabilität
Beachten Sie, dass, anders als 1.9.0, 2.0.0 ein stabiles Release ist, obwohl die teeny-Nummer 0 ist. Es wird allen Autoren von Programmbibliotheken stärkstens empfohlen, 2.0.0 zu unterstützen — wie bereits gesagt, sollte die Migration von 1.9 auf 2.0 nicht sonderlich schwerfallen.
Ruby 2.0.0 ist produktionsreif und wir Ihr Leben als Rubyist verschönern.
Notizen
Einführende Artikel
Hier sind einige Einführungen in Ruby 2 von Dritten:
- http://blog.marc-andre.ca/2013/02/23/ruby-2-by-example (ausführlich, empfohlen)
- https://speakerdeck.com/shyouhei/whats-new-in-ruby-2-dot-0 (ausführlich, empfohlen)
- http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html (kurz, japanisch)
- https://speakerdeck.com/nagachika/rubyist-enumeratorlazy (nur
Enumerator::Lazy
, japanisch)
Die folgenden Artikel sind durchaus hilfreich, aber im Bezug auf Refinements veraltet:
- http://rubysource.com/a-look-at-ruby-2-0/
- https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails
- http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features/
- http://www.infoq.com/news/2012/11/ruby-20-preview1
In der aktuellen Ausgabe des Rubyist Magazine finden sich einige Artikel, die von den Feature-Entwicklern selbst verfasst wurden:
http://jp.rubyist.net/magazine/?0041-200Special
Obwohl diese Artikel in Japanisch verfasst wurden, sind für die Zukunft englische Übersetzungen geplant.
Inkompatibilitäten
Es gibt fünf auffällige Inkompatibilitäten, von denen wir wissen:
- Die Standardkodierung für Ruby-Skripte ist nun UTF-8 [#6679]. Einige Leute sind der Meinung, dass dies existierende Programme betrifft, etwa werden scheinbar einige Benchmark-Programme sehr langsam [ruby-dev:46547].
- Iconv wurde entfernt. Es war ohnehin schon seit der Einführung von M17n in Ruby 1.9 deprecated; benutzen Sie stattdessen String#encode usw.
- Es gibt einen ABI-Bruch [ruby-core:48984]. Wir sind allerdings der
Auffassung, dass normale Nutzer einfach ihre Extension-Libraries neu
installieren können/sollten. KOPIEREN SIE KEINE
.so
- ODER.bundle
-DATEIEN VON 1.9. - #lines, #chars, #codepoints und #bytes geben nun ein Array anstelle
eines Enumerators zurück [#6670], wodurch das gewohnt gewordene
Idiom
lines.to_a
entfällt. Nutzen Sie #each_line usw. um einen Enumerator zu erhalten. - Object#inspect gibt nun stets einen String à la
#<ClassName:0x...>
zurück statt an #to_s zu delegieren [#2152].
Daneben gibt es einige vergleichsweise kleine Inkompatibilitäten [ruby-core:49119].
Status von Refinements
Wir haben ein neues Feature namens Refinements in die Sprache eingeführt, das Rubys Modularität um ein weiteres Konzept erweitert. Beachten Sie jedoch bitte, dass Refinements noch immer experimentell sind: wir können ihre Spezifikation in Zukunft ändern. Abgesehen davon möchten wir Sie jedoch dazu ermutigen, mit ihnen zu spielen und uns Ihre Gedanken dazu mitzuteilen. Ihr Feedback wird dabei helfen, diese interessante Feature festzuschmieden.
Danksagung
Eine große Anzahl von Leuten haben an Ruby 2 mitgearbeitet, eine komplette Danksagung selbst für wenige Teile der Mitarbeit wäre viel zu groß, um sie hier einzufügen. Es tut mir Leid, aber lassen Sie mich stattdessen einen Link auf eine SpecialThanks-Seite setzen:
https://bugs.ruby-lang.org/projects/ruby/wiki/200SpecialThanks
Vielen Dank euch allen!
Download
- ruby-2.0.0-p0.tar.bz2
-
MD5-Summe
895c1c581f8d28e8b3bb02472b2ccf6a
SHA256
c680d392ccc4901c32067576f5b474ee186def2fcd3fcbfa485739168093295f
Größe
10.814.890 Byte
- ruby-2.0.0-p0.tar.gz
-
MD5-Summe
50d307c4dc9297ae59952527be4e755d
SHA256
aff85ba5ceb70303cb7fb616f5db8b95ec47a8820116198d1c866cc4fff151ed
Größe
13.608.925 Byte
- ruby-2.0.0-p0.zip
-
MD5-Summe
db5af5d6034646ad194cbdf6e50f49ee
SHA256
0d0af6a9c8788537efd8d7d2358ce9468e6e2b7703dacba9ebd064d8b7da5f99
Größe
15.037.340 Byte