Ruby 2.6.0-rc2 veröffentlicht

Veröffentlicht von naruse am 15. Dez 2018

Wir freuen uns, die Veröffentlichung von Ruby 2.6.0-rc2 bekannt zu geben.

Ruby 2.6.0-rc2 ist die zweite Release Candidate von Ruby 2.6.0. RC2 wird veröffentlicht, um das gebundelte Bundler 1.17 anstelle von 2.0 zu testen. Es führt einige neue Features und Leistungsverbesserungen ein, zum Beispiel

JIT

Ruby 2.6 führt eine erste Implementierung eines JIT (Just-in-time) Compilers ein.

Der JIT-Compiler zielt darauf ab, die Leistung jeder Ruby-Programmausführung zu verbessern. Im Gegensatz zu herkömmlichen JIT-Compilern für andere Sprachen führt Rubys JIT-Compiler eine JIT-Kompilierung auf einzigartige Weise durch, indem er C-Code auf eine Festplatte schreibt und einen gemeinsamen C-Compilerprozess startet, um nativen Code zu generieren. Siehe auch: MJIT-Organisation (von Vladimir Makarov).

Anwendung: Geben Sie einfach --jit in der Befehlszeile oder in der Umgebungsvariable $RUBYOPT an. Die Angabe von --jit-verbose=1 ermöglicht die Ausgabe grundlegender Informationen über die laufende JIT-Kompilierung. Weitere Optionen finden Sie unter ruby --help.

Der Hauptzweck dieser JIT-Veröffentlichung ist es, eine Gelegenheit zu bieten, zu prüfen, ob sie für Ihre Plattform funktioniert, und Sicherheitsrisiken vor der 2.6-Veröffentlichung zu finden. Der JIT-Compiler wird unterstützt, wenn Ruby mit GCC, Clang oder Microsoft VC++ erstellt wurde, was zur Laufzeit verfügbar sein muss. Andernfalls können Sie ihn vorerst nicht verwenden.

Mit Ruby 2.6.0-rc2 haben wir eine 1,7-fache Leistungssteigerung gegenüber Ruby 2.5 auf einer CPU-intensiven, nicht-trivialen Benchmark-Workload namens Optcarrot erzielt https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208. Wir werden die Leistung auch bei speicherintensiven Workloads wie Rails-Anwendungen verbessern.

Bleiben Sie dran für das neue Zeitalter der Ruby-Performance.

RubyVM::AbstractSyntaxTree [Experimentell]

Ruby 2.6 führt das Modul RubyVM::AbstractSyntaxTree ein.

Dieses Modul verfügt über eine parse-Methode, die Ruby-Code aus einer gegebenen Zeichenkette parst und AST-Knoten (Abstract Syntax Tree) zurückgibt, sowie eine parse_file-Methode, die Ruby-Code aus einer gegebenen Datei parst und AST-Knoten zurückgibt. Die Klasse RubyVM::AbstractSyntaxTree::Node wird ebenfalls eingeführt. Sie können Standortinformationen und Kindknoten von Node-Objekten abrufen. Dieses Feature ist experimentell. Die Kompatibilität der Struktur der AST-Knoten wird nicht garantiert.

Neue Funktionen

  • Fügt einen neuen Alias then zu Kernel#yield_self hinzu. [Feature #14594]

  • else ohne rescue verursacht jetzt einen Syntaxfehler. [EXPERIMENTELL][Feature #14606]

  • Konstantennamen dürfen mit einem nicht-ASCII-Großbuchstaben beginnen. [Feature #13770]

  • Einführung von endlosen Bereichen (endless ranges). [Feature #12912]

    Ein endloser Bereich, (1..), wird eingeführt. Er funktioniert, als ob er kein Ende hätte. Hier sind typische Anwendungsfälle

    ary[1..]                             # identical to ary[1..-1] without magical -1
    (1..).each {|index| block }          # infinite loop from index 1
    ary.zip(1..) {|elem, index| block }  # ary.each.with_index(1) { }
    
  • 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__. Traditionell konnten dieselben Informationen durch eval("[__FILE__, __LINE__]", binding) abgerufen werden, aber wir planen, dieses Verhalten zu ändern, sodass Kernel#eval den Quellcode-Speicherort der Bindung ignoriert [Bug #4352]. Daher sollten Benutzer diese neu eingeführte Methode anstelle von Kernel#eval verwenden.

  • Fügt die Option :exception hinzu, damit Kernel#system bei einem Fehler eine Ausnahme auslöst, anstatt false zurückzugeben. [Feature #14386]

  • Fügt einen "Oneshot"-Modus zu Coverage hinzu. [Feature#15022]

    • Dieser Modus prüft, ob jede Zeile mindestens einmal ausgeführt wurde", anstatt wie oft jede Zeile ausgeführt wurde". Ein Hook für jede Zeile wird höchstens einmal ausgelöst, und nachdem er ausgelöst wurde, wird das Hook-Flag entfernt, d.h. er läuft ohne Overhead.
    • Fügt das Schlüsselwortargument :oneshot_lines zu Coverage.start hinzu.
    • Fügt die Schlüsselwortargumente :stop und :clear zu Coverage.result hinzu. Wenn clear true ist, werden die Zähler auf null gesetzt. Wenn stop true ist, wird die Coverage-Messung deaktiviert.
    • Coverage.line_stub, eine einfache Hilfsfunktion, die den "Stub" der Zeilen-Coverage aus einem gegebenen Quellcode erstellt.
  • Fügt FileUtils#cp_lr hinzu. [Feature #4189]

Leistungsverbesserungen

  • Beschleunigt Proc#call, da wir uns nicht mehr um $SAFE kümmern müssen. [Feature #14318]

    Mit dem Benchmark lc_fizzbuzz, der Proc#call viele Male verwendet, können wir x1.4 Verbesserungen messen. [Bug #10212].

  • Beschleunigt block.call, wobei block ein Blockparameter ist. [Feature #14330]

    Ruby 2.5 verbessert die Leistung von Blockübergaben. [Feature #14045]

    Zusätzlich verbessert Ruby 2.6 die Leistung des Aufrufs übergebener Blöcke. Mit einem Mikrobenchmark können wir eine Verbesserung um das 2,6-fache beobachten.

  • Transient Heap (theap) wird 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. Zum Beispiel ist die Erstellung eines kleinen und kurzlebigen Hash-Objekts 2-mal schneller. Mit dem rdoc-Benchmark haben wir eine Leistungsverbesserung von 6-7% beobachtet.

Weitere bemerkenswerte Änderungen seit 2.5

  • $SAFE ist jetzt ein prozessglobaler Zustand und kann wieder auf 0 gesetzt werden. [Feature #14250]

  • Die Übergabe von safe_level an ERB.new ist veraltet. Die Argumente trim_mode und eoutvar werden zu Schlüsselwortargumenten. [Feature #14256]

  • Die unterstützte Unicode-Version wird auf 11 aktualisiert. Es ist geplant, in zukünftigen TEENY-Releases von Ruby 2.6 auf 12 und 12.1 zu aktualisieren.

  • RubyGems 3.0.0.beta3 zusammengeführt. Die Optionen --ri und --rdoc wurden entfernt. Bitte verwenden Sie stattdessen die Optionen --document und --no-document.

  • Bundler Bundler als Standardgem zusammengeführt.

Weitere Informationen finden Sie in NEWS oder in den Commit-Logs.

Mit diesen Änderungen wurden 6411 Dateien geändert, 228864 Einfügungen(+), 97600 Löschungen(-) seit Ruby 2.5.0!

Viel Spaß beim Programmieren mit Ruby 2.6.0-rc2!

Herunterladen

  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.gz

    SIZE:   16723556 bytes
    SHA1:   a4d7f8c8c3584a60fe1a57d03d80162361fe3c78
    SHA256: 9c0245e96379246040f1fd0978f8e447e7f47cdccbdaffdb83302a995276b62b
    SHA512: 789f608f93db6e12835911f3105d9abe2fabb67cd22dc3bafdff38716ac56974925738e7f7788ebef5bdf67b6fd91f84a4ee78a3e5d072cfc8ee0972de737b08
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.zip

    SIZE:   20643747 bytes
    SHA1:   c1a2898949d929dd952880f1c1c2bac2ef2609b4
    SHA256: e8a446cf1f2ffc14483604de0a5e12c2578dd2f672ae87798ca2bbb9b7b73899
    SHA512: 2d06feae13f485f5da59574672b14d03881ed532d652648f94e2435f5d81df623b5ef532b8ba8e0b9bc4ee6baf7c0328a5610eab753a9020a0fea2673254c76c
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.bz2

    SIZE:   14581998 bytes
    SHA1:   94bbee97de4955e67effb7f512c58300617a3a09
    SHA256: b3d03e471e3136f43bb948013d4f4974abb63d478e8ff7ec2741b22750a3ec50
    SHA512: 9bfbe83fd3699b71bae2350801d8c967eb128e79b62a9d36fc0f011b83c53cab28a280939f4cc9f0a28f9bf02dce8eea30866ca4d06480dc44289400abf580ba
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.xz

    SIZE:   11908088 bytes
    SHA1:   13a7f06d832dc28989e3e4321490a6ba528ed023
    SHA256: d620b3d87b3190867304067f3ce77f5305f7ec1b2e73b09c17710c97c028986d
    SHA512: a3dc43c0bc70dfdb9ff0d18b5b9797bbf332524f5d3bbb7940cf4e32286ca715808acfd11ebf3cdbe358a2466b7c6b5be3a7a784af7eb95c071fe1f8b4ab1261
    

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...