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
thenzuKernel#yield_selfhinzu. [Feature #14594] -
elseohnerescuefü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älleary[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_locationhinzugefü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 durcheval("[__FILE__, __LINE__]", binding)abgerufen werden, aber wir planen, dieses Verhalten zu ändern, so dassKernel#evalden Quellcode-Speicherort der Bindung ignoriert [Bug #4352]. Daher sollten Benutzer diese neu eingeführte Methode anstelle vonKernel#evalverwenden. -
Fügt die Option
:exceptionhinzu, damitKernel#systemeinen Fehler auslöst, anstattfalsezurü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_lineszu Coverage.start hinzu. - Fügt die Schlüsselwortargumente
:stopund:clearzu Coverage.result hinzu. Wennclearwahr ist, werden die Zähler auf Null zurückgesetzt. Wennstopwahr 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$SAFEkümmern müssen. [Feature #14318]Mit dem Benchmark
lc_fizzbuzz, derProc#callsehr oft verwendet, können wir eine Verbesserung um das 1,4-fache messen [Bug #10212]. -
Beschleunigt
block.call, wobeiblockein 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
-
$SAFEist ein prozessglobaler Zustand, und wir können ihn wieder auf0setzen. [Feature #14250] -
Die Übergabe von
safe_levelanERB.newist veraltet. Die Argumentetrim_modeundeoutvarwerden 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
--riund--rdocwurden entfernt. Bitte verwenden Sie stattdessen die Optionen--documentund--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