Ruby 3.3.0-preview3 veröffentlicht
Gepostet von naruse am 12. Nov 2023
Wir freuen uns, die Veröffentlichung von Ruby 3.3.0-preview3 bekannt zu geben. Ruby 3.3 fügt einen neuen Parser namens Prism hinzu, verwendet Lrama als Parsergenerator, fügt einen neuen reinen Ruby JIT-Compiler namens RJIT hinzu und viele Leistungsverbesserungen, insbesondere YJIT.
Prism
- Eingeführt den Prism-Parser als Standard-Gem
- Prism ist ein portabler, fehlertoleranter und wartbarer rekursiver Abstiegs-Parser für die Ruby-Sprache
- Prism ist produktionsreif und wird aktiv gepflegt. Sie können es anstelle von Ripper verwenden.
- Es gibt umfangreiche Dokumentation zur Verwendung von Prism
- Prism ist sowohl eine C-Bibliothek, die intern von CRuby verwendet wird, als auch ein Ruby-Gem, das von jeder Tooling verwendet werden kann, die Ruby-Code parsen muss
- Bemerkenswerte Methoden in der Prism-API sind
Prism.parse(source), die die AST als Teil eines ParseResult zurückgibtPrism.dump(source), die die serialisierte AST als String zurückgibtPrism.parse_comments(source), die die Kommentare zurückgibt
- Sie können Pull-Requests oder Issues direkt im Prism-Repository erstellen, wenn Sie am Beitrag interessiert sind
Verwenden Sie Lrama anstelle von Bison
- Ersetzen Sie Bison durch Lrama LALR-Parsergenerator Feature #19637
- Wenn Sie interessiert sind, lesen Sie bitte Die Zukunftsvision des Ruby-Parsers
- Der interne Lrama-Parser wurde aus Wartungsgründen durch einen LR-Parser ersetzt, der von Racc generiert wird
- Parametrisierte Regeln
(?, *, +)werden unterstützt und in Ruby parse.y verwendet
RJIT
- Eingeführt wurde ein reiner Ruby JIT-Compiler RJIT, der MJIT ersetzt hat.
- RJIT unterstützt nur die x86-64-Architektur auf Unix-Plattformen.
- Im Gegensatz zu MJIT ist zur Laufzeit kein C-Compiler erforderlich.
- RJIT existiert nur zu experimentellen Zwecken.
- Sie sollten weiterhin YJIT in der Produktion verwenden.
- Wenn Sie daran interessiert sind, JIT für Ruby zu entwickeln, sehen Sie sich bitte die Präsentation von k0kubun am Tag 3 der RubyKaigi an.
YJIT
- Wesentliche Leistungsverbesserungen gegenüber 3.2
- Die Unterstützung für Splat- und Rest-Argumente wurde verbessert.
- Register werden für Stack-Operationen der virtuellen Maschine zugewiesen.
- Mehr Aufrufe mit optionalen Argumenten werden kompiliert.
- Ausnahmebehandler werden ebenfalls kompiliert.
- Instanzvariablen verlassen den Interpreter nicht mehr mit megamorphen Objektformen.
- Nicht unterstützte Aufruftypen verlassen den Interpreter nicht mehr.
Integer#!=,String#!=,Kernel#block_given?,Kernel#is_a?,Kernel#instance_of?,Module#===sind speziell optimiert.- Jetzt mehr als 3x schneller als der Interpreter bei optcarrot!
- Signifikant verbesserter Speicherverbrauch gegenüber 3.2
- Metadaten für kompilierten Code verbrauchen deutlich weniger Speicher.
- Generiert kompakteren Code auf ARM64
- Die Kompilierungsgeschwindigkeit ist jetzt etwas schneller als 3.2.
- Fügt
RubyVM::YJIT.enablehinzu, womit YJIT zur Laufzeit aktiviert werden kann- Sie können YJIT starten, ohne Befehlszeilenargumente oder Umgebungsvariablen zu ändern.
- Dies kann auch verwendet werden, um YJIT erst zu aktivieren, nachdem Ihre Anwendung vollständig gebootet ist.
--yjit-disablekann verwendet werden, wenn Sie andere YJIT-Optionen nutzen und YJIT während des Bootens deaktivieren möchten.
- Option zum Deaktivieren von Code-GC und zur Behandlung von
--yjit-exec-mem-sizeals harte Grenze- Kann besseres Copy-on-Write-Verhalten auf Servern mit Unicorn und Forking erzeugen
ratio_in_yjit-Statistik, erzeugt von--yjit-stats, ist jetzt in Release-Builds verfügbar; eine spezielle Statistik oder ein Dev-Build ist nicht mehr erforderlich, um auf die meisten Statistiken zuzugreifen.- Exit-Tracing-Option unterstützt jetzt Sampling
--trace-exits-sample-rate=N
- Es wird
--yjit-perfhinzugefügt, um das Profiling mit Linux perf zu erleichtern. - Umfassendere Tests und mehrere Fehlerbehebungen
M:N Thread-Scheduler
- Der M:N Thread-Scheduler wurde eingeführt. [Feature #19842]
- M Ruby-Threads werden von N nativen Threads (OS-Threads) verwaltet, wodurch die Kosten für Thread-Erstellung und -Verwaltung reduziert werden.
- Dies kann die Kompatibilität von C-Erweiterungen beeinträchtigen, daher ist der M:N-Thread-Scheduler im Haupt-Ractor standardmäßig deaktiviert.
- Die Umgebungsvariable
RUBY_MN_THREADS=1aktiviert M:N-Threads im Haupt-Ractor. - M:N-Threads sind in Nicht-Haupt-Raktoren aktiviert.
- Die Umgebungsvariable
- Die Umgebungsvariable
RUBY_MAX_CPU=nlegt die maximale Anzahl vonN(maximale Anzahl nativer Threads) fest. Der Standardwert ist 8.- Da nur ein Ruby-Thread pro Ractor gleichzeitig ausgeführt werden kann, wird die Anzahl der nativen Threads verwendet, die das Minimum der in
RUBY_MAX_CPUangegebenen Zahl und der Anzahl der laufenden Raktoren ist. Daher werden Single-Ractor-Anwendungen (die meisten Anwendungen) 1 nativen Thread verwenden. - Zur Unterstützung blockierender Operationen können mehr als
Nnative Threads verwendet werden.
- Da nur ein Ruby-Thread pro Ractor gleichzeitig ausgeführt werden kann, wird die Anzahl der nativen Threads verwendet, die das Minimum der in
Weitere bemerkenswerte neue Funktionen
Sprache
Leistungsverbesserungen
defined?(@ivar)wird mit Objektformen optimiert.- Namensauflösungen wie
Socket.getaddrinfokönnen jetzt unterbrochen werden (in Umgebungen, in denen pthreads verfügbar sind). Feature #19965- Zu diesem Zweck wird jedes Mal ein pthread erstellt, wenn getaddrinfo oder getnameinfo aufgerufen wird. Dies verursacht einen gewissen Overhead bei der Namensauflösung (ungefähr 2,5x in unseren Experimenten). Wir erwarten nicht, dass der Overhead der Namensauflösung für die meisten Anwendungen ein Problem darstellt, aber wenn Sie solche Probleme beobachten oder unerwartete Auswirkungen sehen, die Ihrer Meinung nach auf diese Änderung zurückzuführen sind, melden Sie diese bitte.
- Die Umgebungsvariable
RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIOwurde hinzugefügt. Feature #19571 - Kinder alter Objekte werden im Garbage Collector nicht mehr sofort in die alte Generation befördert. Feature #19678
- Unterstützung für schwache Referenzen wurde dem Garbage Collector hinzugefügt. Feature #19783
Weitere bemerkenswerte Änderungen seit 3.2
IRB
IRB hat mehrere Verbesserungen erhalten, darunter aber nicht beschränkt auf
- Erweiterte
irb:rdbg-Integration, die ein gleichwertiges Debugging-Erlebnis wiepry-byebugbietet (Doku). - Pager-Unterstützung für die Befehle
ls,show_sourceundshow_cmds. - Genauere und hilfreichere Informationen, die von den Befehlen
lsundshow_sourcebereitgestellt werden. - Experimentelle Autovervollständigung mittels Typanalyse (Doku).
- Es ist jetzt möglich, die Schriftfarbe und den Schriftschnitt im Vervollständigungsdialog mit einer neu eingeführten Klasse Reline::Face zu ändern (Doku)
Darüber hinaus wurde IRB umfangreich refaktorisiert und Dutzende von Fehlern behoben, um zukünftige Erweiterungen zu erleichtern.
Kompatibilitätsprobleme
Hinweis: Ausgenommen sind Feature-Fehlerbehebungen.
Entfernte Konstanten
Die folgenden veralteten Konstanten wurden entfernt.
Entfernte Methoden
Die folgenden veralteten Methoden wurden entfernt.
Entfernte Umgebungsvariablen
Die folgenden veralteten Umgebungsvariablen wurden entfernt.
- Die Umgebungsvariable
RUBY_GC_HEAP_INIT_SLOTSwurde als veraltet markiert und ist eine No-Op. Bitte verwenden Sie stattdessen die UmgebungsvariablenRUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS. Feature #19785
Stdlib-Kompatibilitätsprobleme
ext/readline wird eingestellt
- Wir haben
reline, eine reine Ruby-Implementierung, die mit derext/readlineAPI kompatibel ist. Wir setzen zukünftig aufreline. Wenn Sieext/readlineverwenden müssen, können Sieext/readlineüber rubygems.org mitgem install readline-extinstallieren. - Wir müssen keine Bibliotheken wie
libreadlineoderlibeditmehr installieren.
C-API-Aktualisierungen
Aktualisierte C-APIs
Die folgenden APIs wurden aktualisiert.
Entfernte C-APIs
Die folgenden veralteten APIs wurden entfernt.
Aktualisierungen der Standardbibliothek
RubyGems und Bundler warnen, wenn Benutzer ein Gem anfordern, das in einer zukünftigen Ruby-Version zur gebündelten Gem-Liste werden soll.
Die Zielbibliotheken sind
- abbrev
- base64
- bigdecimal
- csv
- drb
- getoptlong
- mutex_m
- nkf
- observer
- racc
- resolv-replace
- rinda
- syslog
Das folgende Standard-Gem wird hinzugefügt.
- prism 0.15.1
Die folgenden Standard-Gems werden aktualisiert.
- RubyGems 3.5.0.dev
- base64 0.2.0
- benchmark 0.3.0
- bigdecimal 3.1.5
- bundler 2.5.0.dev
- cgi 0.4.0
- csv 3.2.8
- date 3.3.4
- delegate 0.3.1
- drb 2.2.0
- english 0.8.0
- erb 4.0.3
- etc 1.4.3.dev.1
- fcntl 1.1.0
- fiddle 1.1.2
- fileutils 1.7.2
- find 0.2.0
- getoptlong 0.2.1
- io-console 0.6.1.dev
- irb 1.8.3
- logger 1.6.0
- mutex_m 0.2.0
- net-http 0.4.0
- net-protocol 0.2.2
- nkf 0.1.3
- observer 0.1.2
- open-uri 0.4.0
- open3 0.2.0
- openssl 3.2.0
- optparse 0.4.0
- ostruct 0.6.0
- pathname 0.3.0
- pp 0.5.0
- prettyprint 0.2.0
- pstore 0.1.3
- psych 5.1.1.1
- rdoc 6.6.0
- reline 0.3.9
- rinda 0.2.0
- securerandom 0.3.0
- shellwords 0.2.0
- singleton 0.2.0
- stringio 3.0.9
- strscan 3.0.7
- syntax_suggest 1.1.0
- tempfile 0.2.0
- time 0.3.0
- timeout 0.4.1
- tmpdir 0.2.0
- tsort 0.2.0
- un 0.3.0
- uri 0.13.0
- weakref 0.1.3
- win32ole 1.8.10
- yaml 0.3.0
- zlib 3.1.0
Das folgende gebündelte Gem wird von den Standard-Gems befördert.
- racc 1.7.3
Die folgenden gebündelten Gems werden aktualisiert.
- minitest 5.20.0
- rake 13.1.0
- test-unit 3.6.1
- rexml 3.2.6
- rss 0.3.0
- net-imap 0.4.4
- net-smtp 0.4.0
- rbs 3.2.2
- typeprof 0.21.8
- debug 1.8.0
Details zu den Standard-Gems oder gebündelten Gems finden Sie in den GitHub-Releases wie Logger oder im Changelog.
Siehe NEWS oder Commit-Logs für weitere Details.
Mit diesen Änderungen wurden 5207 Dateien geändert, 284820 Einfügungen(+), 174773 Löschungen(-) seit Ruby 3.2.0!
Herunterladen
-
https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview3.tar.gz
SIZE: 21550473 SHA1: 2811f191d66dffee0206771873bd990857ae4ed6 SHA256: 0969141be92e67e0edb84a8fb354acc98f01bd78e602a23a0f136045c82f4809 SHA512: 94db07a6958c09809b2e5b597fa55a121074e8bacb3bf588c83cf0d35b07a8b070172035a49d1abf0d8ee364a9ace824f34e677f7327ffe1acdbab0938ac49c4 -
https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview3.tar.xz
SIZE: 15970144 SHA1: 496600612605f8ebeb955255e98bac73a4cbc045 SHA256: f79afcf122dc7d04fe26cfa4436b9c488b21766fc54b0d2dfb2ba41cd0cdd355 SHA512: d7ab0d703e7884efd31045933409cd68fac1d9941963537ccc8e309ca7c8bee8500a68182135acba22cbdbf4a8ae99f39bf7f0925273eb4fbc3728c0c1ba0c19 -
https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview3.zip
SIZE: 26618303 SHA1: 6a13e08c7e484d42037c1e2c87c5d0e220f893a0 SHA256: c35bf637a647c2f60148368ffb374db5c258570911794f46b6dfdb98ebfe95d9 SHA512: c4ef2cdcdadeb85ad1d42aedc97f9f3d609b3b01eea2319451cf92c81bd31ae8129b7c91fc68571469dd888c01ea0f48f73234b965db17f6a87404ca382f7794
Was ist Ruby
Ruby wurde erstmals 1993 von Matz (Yukihiro Matsumoto) entwickelt und wird nun als Open Source entwickelt. Es läuft auf mehreren Plattformen und wird weltweit, insbesondere für die Webentwicklung, eingesetzt.
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