Ruby 2.6.0 veröffentlicht
Veröffentlicht von naruse am 25. Dez 2018
Wir freuen uns, die Veröffentlichung von Ruby 2.6.0 bekannt zu geben.
Es führt eine Reihe von neuen Funktionen und Leistungsverbesserungen ein, vor allem
- Ein neuer JIT-Compiler.
- Das Modul
RubyVM::AbstractSyntaxTree.
JIT [Experimentell]
Ruby 2.6 führt eine erste Implementierung eines JIT (Just-In-Time) Compilers ein.
Der JIT-Compiler zielt darauf ab, die Leistung von Ruby-Programmen zu verbessern. Im Gegensatz zu traditionellen JIT-Compilern, die In-Prozess arbeiten, schreibt Rubys JIT-Compiler C-Code auf die Festplatte und startet einen gängigen C-Compiler, um nativen Code zu generieren. Weitere Details dazu finden Sie in der MJIT-Organisation von Vladimir Makarov.
Um den JIT-Compiler zu aktivieren, geben Sie --jit auf der Kommandozeile oder in der Umgebungsvariable $RUBYOPT an. Die Angabe von --jit-verbose=1 bewirkt, dass der JIT-Compiler zusätzliche Informationen ausgibt. Lesen Sie die Ausgabe von ruby --help oder die Dokumentation für weitere Optionen.
Der JIT-Compiler wird unterstützt, wenn Ruby mit GCC, Clang oder Microsoft VC++ erstellt wird, die zur Laufzeit verfügbar sein müssen.
Ab Ruby 2.6.0 haben wir eine 1,7x schnellere Leistung im Vergleich zu Ruby 2.5 auf einem CPU-intensiven, nicht-trivialen Benchmark namens Optcarrot erzielt. Er ist jedoch noch experimentell und viele andere speicherintensive Workloads wie Rails-Anwendungen profitieren möglicherweise derzeit nicht davon. Weitere Details finden Sie unter Ruby 2.6 JIT - Fortschritt und Zukunft.
Bleiben Sie dran für das neue Zeitalter der Ruby-Performance.
RubyVM::AbstractSyntaxTree [Experimentell]
Ruby 2.6 führt das Modul RubyVM::AbstractSyntaxTree ein. **Die zukünftige Kompatibilität dieses Moduls ist nicht garantiert**.
Dieses Modul verfügt über eine parse-Methode, die die gegebene Zeichenkette als Ruby-Code parst und die AST (Abstract Syntax Tree)-Knoten des Codes zurückgibt. Die parse_file-Methode öffnet die angegebene Datei als Ruby-Code, parst sie und gibt AST-Knoten zurück.
Die Klasse RubyVM::AbstractSyntaxTree::Node wird ebenfalls eingeführt. Sie können den Quellcode-Speicherort und die Kindknoten von Node-Objekten abrufen. Diese Funktion ist experimentell.
Weitere bemerkenswerte neue Funktionen
-
Alias für
Kernel#yield_selfnamens#thenhinzugefügt. [Feature #14594] -
Konstantennamen dürfen mit einem nicht-ASCII-Großbuchstaben beginnen. [Feature #13770]
-
Einführung von Endlosbereichen. [Feature #12912]
Ein Endlosbereich,
(1..), funktioniert, als ob er kein Ende hätte. Hier sind einige typische Anwendungsfälleary[1..] # identical to ary[1..-1] without magical -1 (1..).each {|index| ... } # enumerates values starting from index 1 ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... } -
Enumerable#chainundEnumerator#+hinzugefügt. [Feature #15144] -
Funktionskompositionsoperatoren
<<und>>zuProcundMethodhinzugefügt. [Feature #6284]f = proc{|x| x + 2} g = proc{|x| x * 3} (f << g).call(3) # -> 11; identical to f(g(3)) (f >> g).call(3) # -> 15; identical to g(f(3)) -
Binding#source_locationhinzugefügt. [Feature #14230]Diese Methode gibt den Quellcode-Speicherort der Bindung zurück, ein 2-Element-Array von
__FILE__und__LINE__. Technisch gesehen ist dies identisch miteval("[__FILE__, __LINE__]", binding). Wir planen jedoch, dieses Verhalten zu ändern, so dassKernel#evalden Quellcode-Speicherort der Bindung ignoriert [Bug #4352]. Daher wird empfohlen,Binding#source_locationanstelle vonKernel#evalzu verwenden. -
Eine Option
exception:zuKernel#systemhinzugefügt, die beim Fehlschlag eine Ausnahme auslöst, anstattfalsezurückzugeben. [Feature #14386] -
Oneshot-Modus zu
Coveragehinzugefügt. [Feature#15022]- Dieser Modus prüft, "ob jede Zeile mindestens einmal ausgeführt wurde oder nicht", anstatt "wie oft jede Zeile ausgeführt wurde". Ein Hook für jede Zeile wird nur einmal ausgelöst, und sobald er ausgelöst wird, wird das Hook-Flag entfernt, d. h. er läuft mit null Overhead.
oneshot_lines:Keyword-Argument zuCoverage.starthinzugefügt.stop:undclear:Keyword-Argumente zuCoverage.resulthinzugefügt. Wennclearwahr ist, werden die Zähler auf null gesetzt. Wennstopwahr ist, wird die Coverage-Messung deaktiviert.Coverage.line_stubist eine einfache Hilfsfunktion, die den "Stub" der Zeilenabdeckung aus einem gegebenen Quellcode erstellt.
-
FileUtils#cp_lrhinzugefügt. Funktioniert wiecp_r, verlinkt aber anstelle von Kopieren. [Feature #4189]
Leistungsverbesserungen
-
Beschleunigung von
Proc#calldurch Entfernen der temporären Zuweisung für$SAFE. [Feature #14318]Wir haben eine Leistungsverbesserung um das 1,4-fache im Benchmark
lc_fizzbuzzbeobachtet, derProc#callviele Male aufruft. [Bug #10212] -
Beschleunigung von
block.call, wennblockals Blockparameter übergeben wird. [Feature #14330]In Kombination mit den Verbesserungen der Blockverarbeitung, die in Ruby 2.5 eingeführt wurden, ist die Blockauswertung in Ruby 2.6 in einem Mikro-Benchmark 2,6x schneller. [Feature #14045]
-
Transient Heap (
theap) eingeführt. [Bug #14858] [Feature #14989]theapist ein verwalteter Heap für kurzlebige Speicherobjekte, auf die von bestimmten Klassen (Array,Hash,ObjectundStruct) verwiesen wird. Das Erstellen kleiner und kurzlebiger Hash-Objekte ist 2x schneller. Mit dem rdoc-Benchmark haben wir eine Leistungsverbesserung von 6-7 % beobachtet. -
Native Implementierungen (
arm32,arm64,ppc64le,win32,win64,x86,amd64) von Coroutinen, um die Kontextwechselleistung von Fiber erheblich zu verbessern. [Feature #14739]Fiber.yieldundFiber#resumesind auf 64-Bit-Linux etwa 5x schneller. Faserintensive Programme können insgesamt bis zu 5 % Verbesserung erwarten.
Weitere bemerkenswerte Änderungen seit 2.5
-
$SAFE ist jetzt ein Prozess-Globalzustand und kann auf
0zurückgesetzt werden. [Feature #14250] -
Die Übergabe von
safe_levelanERB.newist veraltet. Die Argumentetrim_modeundeoutvarwurden zu Schlüsselwortargumenten geändert. [Feature #14256] -
Die Unicode-Unterstützung wurde auf Version 11 aktualisiert. Wir planen, die Unterstützung für Unicode-Version 12 und 12.1 in einem zukünftigen TEENY-Release von Ruby 2.6 hinzuzufügen. Dies wird die Unterstützung für die neue japanische Ära beinhalten.
-
RubyGems 3.0.1 wurde zusammengeführt. Die Optionen
--riund--rdocwurden entfernt. Bitte verwenden Sie stattdessen die Optionen--documentund--no-document. -
Bundler wird nun als Standardgem installiert.
-
In Ausnahmebehandlungsblöcken führt
elseohnerescuenun zu einem Syntaxfehler. [EXPERIMENTELL][Feature #14606]
Weitere Details finden Sie in NEWS oder in den Commit-Logs.
Mit diesen Änderungen wurden 6437 Dateien geändert, 231471 Einfügungen(+), 98498 Löschungen(-) seit Ruby 2.5.0!
Frohe Weihnachten, frohe Feiertage und viel Spaß beim Programmieren mit Ruby 2.6!
Bekanntes Problem
(Dieser Abschnitt wurde am 28. Januar 2019 hinzugefügt.)
Herunterladen
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz
SIZE: 16687800 bytes SHA1: c95f4e86e21390270dad3ebb94491fd42ee2ce69 SHA256: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072 SHA512: 01f886b0c0782a06315c4a46414e9f2b66ee634ba4349c8e0697f511793ae3c56d2ad3cad6563f2b0fdcedf0ff3eba51b9afab907e7e1ac243475772f8688382 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip
SIZE: 20582054 bytes SHA1: a804e63d18da12107e1d101918a3d8f4c5462a27 SHA256: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a SHA512: 16d66ec4a2c6a2e928d5b50e094a5efa481ac6e4d5ed77459d351ef19fe692aa59b68307e3e25229eec5f30ae2f9adae2663bafe9c9d44bfb45d3833d77839d4 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2
SIZE: 14585856 bytes SHA1: b8638eb806efbf7b6af87b24ccc6ad915f262318 SHA256: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599 SHA512: ca3daf9acf11d3db2900af21b66231bd1f025427a9d2212b35f6137ca03f77f57171ddfdb99022c8c8bcd730ff92a7a4af54e8a2a770a67d8e16c5807aa391f1 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz
SIZE: 11918536 bytes SHA1: 9ddaeba3505d2855460c8c653159fc0ac8928c0f SHA256: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f SHA512: c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8
Aktuelle Nachrichten
Ruby 4.0.0 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0 bekannt zu geben. Ruby 4.0 führt „Ruby Box“ und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 25. Dez 2025
Ein neuer Look für Rubys Dokumentation
Nach dem Redesign von ruby-lang.org gibt es weitere Neuigkeiten zur Feier des 30-jährigen Jubiläums von Ruby: docs.ruby-lang.org hat ein komplett neues Erscheinungsbild mit Aliki – dem neuen Standard-Theme von RDoc.
Veröffentlicht von Stan Lo am 23. Dez 2025
Neues Website-Erscheinungsbild
Wir freuen uns, ein umfassendes Redesign unserer Website bekannt zu geben. Das Design für dieses Update wurde von Taeko Akatsuka erstellt.
Veröffentlicht von Hiroshi SHIBATA am 22. Dez 2025
Ruby 4.0.0 preview3 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0-preview3 bekannt zu geben. Ruby 4.0 führt Ruby::Box und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 18. Dez 2025