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_self namens #then hinzugefü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älle

    ary[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#chain und Enumerator#+ hinzugefügt. [Feature #15144]

  • Funktionskompositionsoperatoren << und >> zu Proc und Method hinzugefü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_location hinzugefü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 mit eval("[__FILE__, __LINE__]", binding). Wir planen jedoch, dieses Verhalten zu ändern, so dass Kernel#eval den Quellcode-Speicherort der Bindung ignoriert [Bug #4352]. Daher wird empfohlen, Binding#source_location anstelle von Kernel#eval zu verwenden.

  • Eine Option exception: zu Kernel#system hinzugefügt, die beim Fehlschlag eine Ausnahme auslöst, anstatt false zurückzugeben. [Feature #14386]

  • Oneshot-Modus zu Coverage hinzugefü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 zu Coverage.start hinzugefügt.
    • stop: und clear: Keyword-Argumente zu Coverage.result hinzugefügt. Wenn clear wahr ist, werden die Zähler auf null gesetzt. Wenn stop wahr ist, wird die Coverage-Messung deaktiviert.
    • Coverage.line_stub ist eine einfache Hilfsfunktion, die den "Stub" der Zeilenabdeckung aus einem gegebenen Quellcode erstellt.
  • FileUtils#cp_lr hinzugefügt. Funktioniert wie cp_r, verlinkt aber anstelle von Kopieren. [Feature #4189]

Leistungsverbesserungen

  • Beschleunigung von Proc#call durch Entfernen der temporären Zuweisung für $SAFE. [Feature #14318]

    Wir haben eine Leistungsverbesserung um das 1,4-fache im Benchmark lc_fizzbuzz beobachtet, der Proc#call viele Male aufruft. [Bug #10212]

  • Beschleunigung von block.call, wenn block als 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]

    theap ist ein verwalteter Heap für kurzlebige Speicherobjekte, auf die von bestimmten Klassen (Array, Hash, Object und Struct) 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.yield und Fiber#resume sind 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 0 zurückgesetzt werden. [Feature #14250]

  • Die Übergabe von safe_level an ERB.new ist veraltet. Die Argumente trim_mode und eoutvar wurden 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 --ri und --rdoc wurden entfernt. Bitte verwenden Sie stattdessen die Optionen --document und --no-document.

  • Bundler wird nun als Standardgem installiert.

  • In Ausnahmebehandlungsblöcken führt else ohne rescue nun 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

Weitere Neuigkeiten...