Ruby 2.6.0-rc1 veröffentlicht

Veröffentlicht von naruse am 6. Dez 2018

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

Ruby 2.6.0-rc1 ist die erste Release Candidate von Ruby 2.6.0. Sie führt einige neue Funktionen und Leistungsverbesserungen ein, zum Beispiel

JIT

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

Der JIT-Compiler zielt darauf ab, die Leistung jeder Ruby-Programmausführung zu verbessern. Im Gegensatz zu gewöhnlichen JIT-Compilern für andere Sprachen führt der JIT-Compiler von Ruby die JIT-Kompilierung auf einzigartige Weise durch, indem er C-Code auf eine Festplatte schreibt und einen gängigen C-Compiler-Prozess startet, um nativen Code zu generieren. Siehe auch: MJIT-Organisation von Vladimir Makarov.

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

Der Hauptzweck dieser JIT-Veröffentlichung ist es, eine Chance zu geben zu überprüfen, ob sie für Ihre Plattform funktioniert und Sicherheitsrisiken vor der Veröffentlichung von 2.6 zu finden. Der JIT-Compiler wird unterstützt, wenn Ruby von GCC, Clang oder Microsoft VC++ kompiliert wurde, welche zur Laufzeit verfügbar sein müssen. Andernfalls können Sie ihn derzeit nicht verwenden.

Zum Zeitpunkt von Ruby 2.6.0-rc1 haben wir auf dem CPU-intensiven, nicht-trivialen Benchmark-Workload namens Optcarrot eine 1,7-fach höhere Leistung als Ruby 2.5 erzielt https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208. Wir werden die Leistung auch bei speicherintensiven Workloads wie der Rails-Anwendung 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 hat die Methode parse, die einen gegebenen Ruby-Code als String analysiert und AST-Knoten (Abstract Syntax Tree) zurückgibt, sowie die Methode parse_file, die eine gegebene Ruby-Code-Datei analysiert und AST-Knoten zurückgibt. Die Klasse RubyVM::AbstractSyntaxTree::Node wird ebenfalls eingeführt. Sie können Standortinformationen und Kindknoten von Node-Objekten abrufen. Diese Funktion ist experimentell. Die Kompatibilität der Struktur von AST-Knoten ist nicht garantiert.

Neue Funktionen

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

  • else ohne rescue führt nun zu einem Syntaxfehler. [EXPERIMENTELL]

  • Konstante Namen können mit einem nicht-ASCII-Großbuchstaben beginnen. [Feature #13770]

  • Endlose Bereiche [Feature #12912]

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

    ary[1..]                          # identical to ary[1..-1] without magical -1
    (1..).each {|index| ... }         # infinite loop from index 1
    ary.zip(1..) {|elem, index| ... } # 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, so dass 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 einen Fehler auslöst, anstatt false zurückzugeben. [Feature #14386]

  • Fügt den Einmal-Modus hinzu [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 höchstens einmal ausgelöst, und nachdem er ausgelöst wurde, wird das Hook-Flag entfernt, d.h. er läuft mit Null-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 wahr ist, werden die Zähler auf Null zurückgesetzt. Wenn stop wahr ist, wird die Abdeckungsmessung deaktiviert.
    • Coverage.line_stub, eine einfache Hilfsfunktion, die den "Stub" der Zeilenabdeckung aus einem gegebenen Quellcode erstellt.
  • FileUtils#cp_lr. [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 sehr oft verwendet, können wir eine Verbesserung um das 1,4-fache messen [Bug #10212].

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

    Ruby 2.5 verbessert die Leistung beim Übergeben von Blöcken. [Feature #14045] Zusätzlich verbessert Ruby 2.6 die Leistung beim Aufruf ü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 das Erstellen kleiner und kurzlebiger Hash-Objekte 2-mal schneller. Mit dem rdoc-Benchmark haben wir eine Leistungsverbesserung von 6-7% beobachtet.

Weitere bemerkenswerte Änderungen seit 2.5

  • $SAFE ist ein prozessglobaler Zustand, und wir können ihn wieder auf 0 setzen. [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 wurde auf 11 aktualisiert. Es ist geplant, Versionen 12 und 12.1 in zukünftigen TEENY-Releases von Ruby 2.6 zu aktualisieren.

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

  • Bundler als Standard-Gem integriert.

Einzelheiten finden Sie in NEWS oder in den Commit-Logs.

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

Viel Spaß beim Programmieren mit Ruby 2.6.0-rc1!

Herunterladen

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

    SIZE:   16823448 bytes
    SHA1:   889db7731fd43f6dbf7f31ffdb0a29bba1a8d356
    SHA256: 6d6183639ed9c02320d7132e97c65489a39e24d8b55fc4ed35ac53d1189cb61d
    SHA512: ad101adee5c43f3645561e73970f15d4e9141f707da69a92e224575c665949e18ca53389e5315fca2ea3934d77967a59e304353cde4a915537e7c4e4ee20be73
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc1.zip

    SIZE:   20737499 bytes
    SHA1:   457e39aee1978da5e42af42a6ad230421544aa07
    SHA256: 2bcdf468de499e4d6983d60d63dcc883f4c54fdc05a08a54eb93d315477bc4cc
    SHA512: 0842fae8a199f6c1e76f5d775edbf468e18a54f0419324eb73595e0268c728c71733371d71dc2fa342105dbc487987ca5556948a9ef067276a7b5f552462802a
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc1.tar.bz2

    SIZE:   14607078 bytes
    SHA1:   269fe9d414d7731e4a63959fadffe5c50c08ce0e
    SHA256: b4e9c0e8801946e9f0baba30948955f4341e9e04f363c206b7bd774208053eb5
    SHA512: cbd6281b2aab6fbce3f699c1ab57e5423304dca7a547a0b3cd4e8e980326dc7b85b2ca2bfaf3f3a648d40f4222fdf1740d81d422790ee7ae1ba1ed33eb11e3e8
    
  • https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc1.tar.xz

    SIZE:   11851908 bytes
    SHA1:   3b93fdf1c5bd969ab4fe0a8176a6cf64e4597e6e
    SHA256: 21d9d54c20e45ccacecf8bea4dfccd05edc52479c776381ae98ef6a7b4afa739
    SHA512: 3d93d8d80e4900e8b3a27f904ed60581cebc6c55f4ab7acafc81e95001f92f3ea4ddec2da6169b1ed5e0146f7b7c35c1c13b3243955d5825c72170834fe933f3
    

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