Geschrieben von naruse am 30.5.2019
Übersetzt von Marvin Gülker
Wir freuen uns, die Veröffentlichung von Ruby 2.7.0-preview1 bekanntgeben zu können.
Diese Vorschau wird veröffentlicht, um bis zur geplanten finalen Freigabe im Dezember Erfahrungsberichte sammeln zu können. Sie enthält eine Anzahl neuer Funktionalitäten und Performanzverbesserungen, namentlich:
- Defragmentierung für den GC (Campaction GC)
- Musterabgleiche
- Verbesserungen der interaktiven Kommandozeile (REPL)
Defragmentierender GC
Die neue Version wird einen defragmentierenden GC (Compaction GC) einführen, der fragmentierten Arbeitsspeicherplatz defragmentieren kann.
Einige Ruby-Programme, die mit mehreren Threads arbeiten, leiden derzeit unter Speicherfragmentierung. Dies verursacht einen hohen Speicherverbrauch und eine reduzierte Ausführungsgeschwindigkeit.
Zur Behebung des Problems wird die neue Methode GC.compact
eingeführt. Sie defragmentiert den Freispeicher (Heap), indem sie
noch aktive Objekte näher zusammenrückt, sodass weniger Speicherseiten
benötigt werden und der Freispeicher insgesamt besser für
Copy-on-Write geeignet ist. #15626
Musterabgleiche [Experimentell]
Musterabgleiche sind eine häufig genutzte Funktion funktionaler Programmiersprachen. Mit 2.7.0 werden sie als experimentell in die Programmiersprache Ruby eingeführt. #14912 Ein Musterabgleich untersucht das übergebene Objekt und weist seinen Wert dann zu, wenn er auf ein bestimmtes Muster passt.
case JSON.parse('{...}', symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
p age
...
end
Weitere Details können Sie der Präsentation Musterabgleiche - Neue Funktion in Ruby 2.7 entnehmen.
Verbesserung der interaktiven Kommandozeile
Die mitgelieferte interaktive Kommandozeile irb
(REPL: Read-Eval-Print-Loop)
wird mehrzeiliges Editieren unterstützen. Dies wird mithilfe von
reline
, einer readline
-kompatiblen reinen Ruby-Bibliothek,
umgesetzt. Darüber hinaus wird irb
besser mit RDoc integriert: es
wird möglich, die Referenzdokumentation für eine bestimmte Klasse,
ein bestimmtes Modul oder auch eine bestimmte Methode nachzuschlagen.
#14683,
#14787,
#14918
Schließlich werden von binding.irb
angezeigte Quellcode-Zeilen und
Ergebnisse von inspect
farblich hevorgehoben werden.
Sonstige bemerkenswerte neue Funktionen
-
Ein Methoden-Referenz-Operator,
.:
, wird als experimentell eingeführt. #12125, #13581 -
Blockparameter werden für abgekürzten Zugriff automatisch nummeriert (experimentell). #4475
-
Ruby verfügt bereits über endlose Range-Objekte. Nunmehr werden auch anfangslose Range-Objekte eingeführt. Diese sind vielleicht nicht so nützlich wie endlose Range-Objekte, könnten aber für domänenspezifische Sprachen praktisch sein. #14799
ary[..3] # identical to ary[0..3] rel.where(sales: ..100)
-
Enumerable#tally
wird hinzugefügt. Die Methode zählt das Vorkommen jedes Elements.["a", "b", "c", "b"].tally #=> {"a"=>1, "b"=>2, "c"=>1}
Performanzverbesserungen
-
JIT [Experimentell]
-
JIT-kompilierter Code wird neu zu weniger optimiertem Code kompiliert, wenn eine Optimierungsannahme sich als falsch herausstellt.
-
Method-Inlining wird durchgeführt, wenn eine Methode als rein (pure) gilt. Diese Optimierung ist noch experimentell und zahlreiche Methoden gelten noch nicht als rein.
-
Der Standardwert von
--jit-min-calls
wird von 5 auf 10.000 geändert. -
Der Standardwert von
--jit-max-cache
wird von 1.000 auf 100 geändert.
-
Sonstige bemerkenswerte Änderungen seit 2.6
-
Die Nutzung von
Proc.new
undproc
ohne Block in einer Methode, die einen Block erwartet, führt nun zu einer Warnung. -
Die Nutzung von
lambda
ohne block in einer Methode, die einen Block erwartet, erzeugt einen Fehler. -
Die Unicode- und Emoji-Version werden von 11.0.0 auf 12.0.0 angehoben. [Feature #15321]
-
Die Unicode-Version wird auf 12.1.0 angehoben, um Unterstützung für U+32FF SQUARE ERA NAME REIWA zu erhalten. [Feature #15195]
-
Date.jisx0301
,Date#jisx0301
undDate.parse
implementieren provisorische Unterstützung für die neue japanische Ära. Dies ist keine offiziell unterstützte Änderung, sondern provisorisch bis zur Freigabe von JIS X 0301. [Feature #15742] -
Ruby nutzt jetzt C99, welches der Compiler unterstützen muss. [Misc #15347]
- Details zum genutzten Dialekt: https://bugs.ruby-lang.org/projects/ruby-master/wiki/C99
Siehe die NEWS oder die Commit-Logs für weitere Details.
Mit diesen Änderungen wurden 1727 Dateien geändert, 76022 Einfügungen(+), 60286 Löschungen(-) seit Ruby 2.6.0!
Viel Spaß bei der Programmierung mit Ruby 2.7!
Download
-
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.gz
SIZE: 16021286 bytes SHA1: 2fbecf42b03a9d4391b81de42caec7fa497747cf SHA256: c44500af4a4a0c78a0b4d891272523f28e21176cf9bc1cc108977c5f270eaec2 SHA512: f731bc9002edd3a61a4955e4cc46a75b5ab687a19c7964f02d3b5b07423d2360d25d7be5df340e884ca9945e3954e68e5eb11b209b65b3a687c71a1abc24b91f
-
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.zip
SIZE: 20283343 bytes SHA1: 7488346fa8e58203a38158752d03c8be6b1da65b SHA256: fdf25573e72e1769b51b8d541d0e1a894a5394dbfdf1b08215aa093079cca64c SHA512: b3b1f59dce94c242ef88a4e68381a4c3a6f90ba0af699083e5a1a00b0fb1dce580f057dad25571fe789ac9aa95aa6e9c071ebb330328dc822217ac9ea9fbeb3f
-
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.bz2
SIZE: 14038296 bytes SHA1: f7e70cbc2604c53a9e818a2fc59cd0e2d6c859fa SHA256: d45b4a1712ec5c03a35e85e33bcb57c7426b856d35e4f04f7975ae3944d09952 SHA512: a36b241fc1eccba121bb7c2cc5675b11609e0153e25a3a8961b67270c05414b1aa669ce5d4a5ebe4c6b2328ea2b8f8635fbba046b70de103320b3fdcb3d51248
-
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.xz
SIZE: 11442988 bytes SHA1: 45e467debc194847a9e3afefb20b11e6dc28ea31 SHA256: 8c546df3345398b3edc9d0ab097846f033783d33762889fd0f3dc8bb465c3354 SHA512: d416e90bfa3e49cc0675c4c13243c8ec319b7a0836add1bd16bd7662d09eaf46656d26e772ef3b097e10779896e643edd8a6e4f885147e3235257736adfdf3b5
Was ist Ruby
Die Programmiersprache Ruby wurde 1993 von Yukihiro „Matz“ Matsumoto erfunden und wird heute als quelloffene Software entwickelt. Sie läuft auf verschiedenen Plattformen und wird überall auf der Welt namentlich für die Webentwicklung genutzt.