Geschrieben von naruse am 25.12.2016
Übersetzt von Marvin Gülker
Wir freuen uns, die Veröffentlichung von Ruby 2.4.0 bekannt geben zu können.
Bei Ruby 2.4.0 handelt es sich um die erste stabile Veröffentlichung von Rubys 2.4er-Serie und führt zahlreiche neue Features ein, beispielsweise:
Verbesserung der Hash-Tabellen (von Wladimir Makarow)
Die interne Struktur von Hash-Tabellen (st_table) wird durch die Einführung offener Adressierung (open addressing) und eines die Einfügungsreihenfolge beibehaltenden Arrays (inclusion order array) verbessert. Diese Verbesserung ist mit diversen Leuten diskutiert worden, insbesondere mit Jura Sokolow.
Binding#irb: Startet eine REPL-Sitzung wie binding.pry
Im Rahmen von Debugging ist es oft hilfreich, sich Variablenwerte
mithilfe von p
anzeigen zu lassen. Mit
pry war es möglich, durch Einfügen der
Anweisung binding.pry
in die Anwendung an der betroffenen Stelle
eine REPL zu starten und beliebigen Ruby-Code auszuführen. Mit
r56624
wird binding.irb
eingeführt, das sich ganz ähnlich verhält, aber
eine reguläre IRB startet.
Zusammenführung von Fixnum und Bignum in Integer
Obwohl ISO/IEC 30170:2012 keine näheren Bestimmungen über die Integer-Klasse trifft, führt Ruby mit Fixnum und Bignum zwei sichtbare Subklassen von Integer. Mit Ruby 2.4 werden diese in Integer vereinigt. Daraus folgt, dass alle C-Extensions, die die Klassen Fixnum oder Bignum benutzen, überarbeitet werden müssen.
Siehe dazu auch das dazugehörige Ticket und die Folien von akr.
String unterstützt Groß- und Kleinschreibung mit Unicode
Die Methoden String/Symbol#upcase/downcase/swapcase/capitalize(!)
wenden bei der Konvertierung in Groß- oder Kleinschreibung nunmehr
Unicode-Regeln anstelle der bisherigen ASCII-Regeln an.
Performanzverbesserungen
Ruby 2.4 enthält im Übrigen die folgenden Performanzverbesserungen, die Änderungen am Sprachverhalten mit sich bringen:
Array#max, Array#min
[x, y].max
and [x, y].min
wurden so optimiert, dass sie unter
bestimmten Bedingungen kein zusätzliches temporäres Array erzeugen.
Regexp#match?
Eine Methode Regexp#match?
wurde hinzugefügt, die einen Regulären
Ausdruck anwendet, ohne eine Backreference zu erstellen oder $~
zu
verändern, wodurch Objektallozierungen eingespart werden können.
Sonstige Performanzverbesserungen
Debugging
Thread#report_on_exception und Thread.report_on_exception
Exceptions in Threads werden von Ruby ignoriert, bis der betreffende
Thread mit einem anderen zusammengeführt wird (join). Wenn
report_on_exception = true
gesetzt ist, erhalten Sie eine Warnung,
wenn ein Thread wegen einer nicht behandelten Exception abgestürzt
ist.
Geben Sie uns Rückmeldung über das gewünschte Standardverhalten von
report_on_exception
und über report-on-GC, welches eine Nachricht
anzeigt, wenn ein Thread vom GC vernichtet wird, ohne zuvor mit
einem anderen Thread zusammengeführt worden zu sein.
Deadlock-Erkennung für Threads zeigt Threads nun mit Backtrace und Abhängkeiten
Zwar besitzt Ruby eine Deadlock-Erkennung bezüglich wartender Threads, aber ihre Meldungen enthalten nicht ausreichend Informationen für sinnvolles Debugging. Die Deadlock-Erkennung von Ruby 2.4 listet Threads nun mit ihrem Backtrace und abhängigen Threads.
Sonstige wesentliche Änderungen seit 2.3
- Unterstützung von OpenSSL 1.1.0 (Unterstützung von 0.9.7 und früher wird aufgegeben)
- ext/tk wurde aus der stdlib entfernt Feature #8539
- XMLRPC wurde aus der stdlib entfernt Feature #12160
Siehe die NEWS oder das Commitlog für weitere Informationen.
Mit diesen Änderungen wurden seit Ruby 2.3.0 2523 Dateien geändert, 289129 Einfügungen(+), 84670 Löschungen(-)!
Frohe Weihnachten, schöne Ferien und haben Sie Spaß an der Programmierung mit Ruby 2.4!
Download
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
SIZE: 12572424 bytes SHA1: 944d2588308391b20a89642472454d1dfe7b2360 SHA256: 440bbbdc49d08d3650f340dccb35986d9399177ad69a204def56e5d3954600cf SHA512: bef7bb53f63fb74073d071cc125fb67b273ed0779ef43c2d2969089b9ca21fff1bd012281c5b748f7a3c24dd26e71730d7248c05a01cb23ab2089eb4d02115fe
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.gz
SIZE: 14104044 bytes SHA1: d44a3c50a0e742341ed3033d5db79d865151a4f4 SHA256: 152fd0bd15a90b4a18213448f485d4b53e9f7662e1508190aa5b702446b29e3d SHA512: 21c9f596b42dd9cba7a53963a59fed0c2e0c1eb960a4ac7087ea3eaa991ce9252d32639e1edcb75b1d709bc07c4820a6dc336ab427d0643c6e6498e0eacdbc8b
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.xz
SIZE: 9906880 bytes SHA1: 038804bbd0e77508dd2510b729a9f3b325489b2e SHA256: 3a87fef45cba48b9322236be60c455c13fd4220184ce7287600361319bb63690 SHA512: 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.zip
SIZE: 15758757 bytes SHA1: 29e1bab11551011718c35a51827edcb55bd656fc SHA256: 5c2bbfa26fd6a15a2d70961874b0f3a386206fcc5f698e240dd8b0c9f0f18c5e SHA512: 31d932372ce490eeac0a70bc8dcf842909a90435422398d069c05cf01d994936064b8f4e60879e28a8655c1296eb8e180e348cb95e001ed6ca73cda0ff77de23