Ruby 4.0.0 preview3 veröffentlicht
Veröffentlicht von naruse am 18. Dez 2025
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.
Ruby::Box
Ein neues (experimentelles) Feature zur Trennung von Definitionen. Details zu „Ruby Box“ finden Sie unter doc/language/box.md. [Feature #21311] [Misc #21385]
Sprachänderungen
-
*nilruft nicht mehrnil.to_aauf, ähnlich wie**nilnichtnil.to_hashaufruft. [Feature #21047] -
Logische binäre Operatoren (
||,&&,andundor) am Anfang einer Zeile setzen die vorherige Zeile fort, wie bei fließenden Punkten. Die folgenden beiden Codes sind gleichif condition1 && condition2 ... endif condition1 && condition2 ... end
Aktualisierungen der Kernklassen
Hinweis: Hier werden nur herausragende Klassenaktualisierungen aufgeführt.
-
Kernel
-
Kernel#inspectprüft nun auf die Existenz einer#instance_variables_to_inspectMethode, wodurch gesteuert werden kann, welche Instanzvariablen im#inspectString angezeigt werden.class DatabaseConfig def initialize(host, user, password) @host = host @user = user @password = password end private def instance_variables_to_inspect = [:@host, :@user] end conf = DatabaseConfig.new("localhost", "root", "hunter2") conf.inspect #=> #<DatabaseConfig:0x0000000104def350 @host="localhost", @user="root"> -
Ein veraltetes Verhalten, die Prozess-Erzeugung durch
Kernel#openmit einem führenden|, wurde entfernt. [Feature #19630]
-
-
Binding
Binding#local_variablesschließt keine nummerierten Parameter mehr ein. Außerdem lehnenBinding#local_variable_getundBinding#local_variable_setdie Handhabung von nummerierten Parametern ab. [Bug #21049]
-
File
File::Stat#birthtimeist nun unter Linux über den statx-Systemaufruf verfügbar, wenn vom Kernel und Dateisystem unterstützt. [Feature #21205]
-
IO
-
IO.selectakzeptiertFloat::INFINITYals Timeout-Argument. [Feature #20610] -
Ein veraltetes Verhalten, die Prozess-Erzeugung durch
IO-Klassenmethoden mit einem führenden|, wurde entfernt. [Feature #19630]
-
-
Math
Math.log1pundMath.expm1werden hinzugefügt. [Feature #21527]
-
Method
Method#source_location,Proc#source_locationundUnboundMethod#source_locationgeben nun erweiterte Standortinformationen mit 5 Elementen zurück:[Pfad, Startzeile, Startspalte, Endzeile, Endspalte]. Das frühere 2-Elemente-Format[Pfad, Zeile]kann immer noch durch Aufruf von.take(2)auf dem Ergebnis erhalten werden. [Feature #6012]
-
Proc
Proc#parameterszeigt nun anonyme optionale Parameter als[:opt]anstelle von[:opt, nil], was die Ausgabe konsistent mit dem Fall macht, wenn der anonyme Parameter erforderlich ist. [Bug #20974]
-
Ractor
-
Die Klasse
Ractor::Portwurde für einen neuen Synchronisationsmechanismus zur Kommunikation zwischen Ractors hinzugefügt. [Feature #21262]port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 << 12 end 2.times{ p port1.receive } #=> 1, 2 2.times{ p port2.receive } #=> 11, 12Ractor::Portbietet die folgenden MethodenRactor::Port#receiveRactor::Port#send(oderRactor::Port#<<)Ractor::Port#closeRactor::Port#closed?
Als Ergebnis wurden
Ractor.yieldundRactor#takeentfernt. -
Ractor#joinundRactor#valuewurden hinzugefügt, um auf die Beendigung eines Ractors zu warten. Diese sind ähnlich zuThread#joinundThread#value. -
Ractor#monitorundRactor#unmonitorwurden als Low-Level-Interfaces hinzugefügt, die intern zur Implementierung vonRactor#joinverwendet werden. -
Ractor.selectakzeptiert nun nur noch Ractors und Ports. Wenn Ractors angegeben sind, wird zurückgekehrt, wenn ein Ractor terminiert. -
Ractor#default_portwurde hinzugefügt. JederRactorhat einen Standard-Port, der vonRactor.sendundRactor.receiveverwendet wird. -
Ractor#close_incomingundRactor#close_outgoingwurden entfernt. -
Ractor.shareable_procundRactor.shareable_lambdawurden eingeführt, um Proc oder Lambda teilbar zu machen. [Feature #21550], [Feature #21557]
-
-
Range
-
Range#to_setundEnumerator#to_setführen nun Größenprüfungen durch, um Probleme mit endlosen Bereichen zu vermeiden. [Bug #21654] -
Range#overlap?behandelt nun unendliche (unbeschränkte) Bereiche korrekt. [Bug #21185] -
Das Verhalten von
Range#maxbei beginnlosen Ganzzahlbereichen wurde korrigiert. [Bug #21174] [Bug #21175]
-
-
Ruby
- Ein neues Top-Level-Modul
Rubywurde definiert, das Ruby-bezogene Konstanten enthält. Dieses Modul wurde in Ruby 3.4 reserviert und ist nun offiziell definiert. [Feature #20884]
- Ein neues Top-Level-Modul
-
Ruby::Box
- Ein neues (experimentelles) Feature zur Trennung von Definitionen. Details zu „Ruby Box“ finden Sie unter doc/language/box.md. [Feature #21311] [Misc #21385]
-
Set
-
Setist nun eine Kernklasse und keine automatisch geladene stdlib-Klasse mehr. [Feature #21216] -
Set#inspectgibt nun einen String zurück, der fürevalgeeignet ist, und verwendet die SyntaxSet[](z. B.Set[1, 2, 3]anstelle von#<Set: {1, 2, 3}>). Dies macht es konsistent mit anderen Kernkollektionsklassen wie Array und Hash. [Feature #21389] -
Die Übergabe von Argumenten an
Set#to_setundEnumerable#to_setist nun veraltet. [Feature #21390]
-
-
Socket
Socket.tcp&TCPSocket.newakzeptieren ein Schlüsselwortargumentopen_timeout, um das Timeout für die anfängliche Verbindung festzulegen. [Feature #21347]
-
String
-
Unicode auf Version 17.0.0 und Emoji auf Version 17.0 aktualisiert. [Feature #19908][Feature #20724][Feature #21275] (gilt auch für Regexp)
-
String#strip,strip!,lstrip,lstrip!,rstripundrstrip!werden erweitert, um*selectors-Argumente zu akzeptieren. [Feature #21552]
-
-
Thread
- Unterstützung für das Argument
Thread#raise(cause:), ähnlich wie beiKernel#raise, eingeführt. [Feature #21360]
- Unterstützung für das Argument
-
Fiber
- Unterstützung für das Argument
Fiber#raise(cause:), ähnlich wie beiKernel#raise, eingeführt. [Feature #21360]
- Unterstützung für das Argument
-
Fiber::Scheduler
- Einführung von
Fiber::Scheduler#fiber_interrupt, um einen Fiber mit einer gegebenen Ausnahme zu unterbrechen. Der anfängliche Anwendungsfall ist die Unterbrechung eines Fibers, der auf eine blockierende IO-Operation wartet, wenn die IO-Operation geschlossen wird. [Feature #21166]
- Einführung von
-
Pathname
- Pathname wurde von einem Standard-Gem zu einer Kernklasse von Ruby befördert. [Feature #17473]
Stdlib-Aktualisierungen
Die folgenden gebündelten Gems werden von Standard-Gems befördert.
- ostruct 0.6.3
- pstore 0.2.0
- benchmark 0.5.0
- logger 1.7.0
- rdoc 6.17.0
- win32ole 1.9.2
- irb 1.16.0
- reline 0.6.3
- readline 0.0.4
- fiddle 1.1.8
Wir listen nur Stdlib-Änderungen auf, die bemerkenswerte Feature-Änderungen sind.
Andere Änderungen werden in den folgenden Abschnitten aufgeführt. Wir haben auch die Release-Historie ab der vorherigen gebündelten Version, Ruby 3.3.0, aufgeführt, falls sie GitHub-Releases hat.
Das folgende Standard-Gem wird hinzugefügt.
- win32-registry 0.1.2
Die folgenden Standard-Gems werden aktualisiert.
- RubyGems 4.0.2
- bundler 4.0.2
- date 3.5.1
- digest 3.2.1
- english 0.8.1
- erb 6.0.1
- etc 1.4.6
- fcntl 1.3.0
- fileutils 1.8.0
- forwardable 1.4.0
- io-console 0.8.2
- io-nonblock 0.3.2
- io-wait 0.4.0
- ipaddr 1.2.8
- json 2.18.0
- net-http 0.9.1
- openssl 4.0.0
- optparse 0.8.1
- pp 0.6.3
- prism 1.6.0
- psych 5.3.1
- resolv 0.7.0
- stringio 3.2.0
- strscan 3.1.6
- time 0.4.2
- timeout 0.6.0
- uri 1.1.1
- weakref 0.1.4
- zlib 3.2.2
Die folgenden gebündelten Gems werden aktualisiert.
- minitest 5.27.0
- power_assert 3.0.1
- rake 13.3.1
- test-unit 3.7.3
- rexml 3.4.4
- net-ftp 0.3.9
- net-imap 0.6.1
- net-smtp 0.5.1
- matrix 0.4.3
- prime 0.1.4
- rbs 3.10.0.pre.2
- typeprof 0.31.0
- debug 1.11.0
- base64 0.3.0
- bigdecimal 4.0.1
- drb 2.2.3
- syslog 0.3.0
- csv 3.3.5
- repl_type_completor 0.1.12
Unterstützte Plattformen
-
Windows
- Unterstützung für MSVC-Versionen älter als 14.0 (_MSC_VER 1900) wurde eingestellt. Dies bedeutet, dass Visual Studio 2015 oder neuer erforderlich ist.
Kompatibilitätsprobleme
-
Die folgenden Methoden wurden aus Ractor entfernt, da
Ractor::Porthinzugefügt wurde.Ractor.yieldRactor#takeRactor#close_incomingRactor#close_outgoging
-
ObjectSpace._id2refist veraltet. [Feature #15408] -
Process::Status#&undProcess::Status#>>wurden entfernt. Sie wurden in Ruby 3.3 als veraltet markiert. [Bug #19868] -
rb_path_checkwurde entfernt. Diese Funktion wurde für die$SAFE-Pfadprüfung verwendet, die in Ruby 2.7 entfernt wurde und bereits veraltet war. [Feature #20971]
Stdlib-Kompatibilitätsprobleme
-
Die CGI-Bibliothek wurde aus den Standard-Gems entfernt. Nun bieten wir nur noch
cgi/escapefür die folgenden Methoden an:CGI.escapeundCGI.unescapeCGI.escapeHTMLundCGI.unescapeHTMLCGI.escapeURIComponentundCGI.unescapeURIComponentCGI.escapeElementundCGI.unescapeElement
-
Mit der Überführung von
Setvon stdlib in eine Kernklasse wurdeset/sorted_set.rbentfernt, undSortedSetist keine automatisch geladene Konstante mehr. Bitte installieren Sie das Gemsorted_setundrequire 'sorted_set', umSortedSetzu verwenden. [Feature #21287]
C-API-Aktualisierungen
-
IO
rb_thread_fd_closeist veraltet und ist jetzt eine No-op. Wenn Sie File-Deskriptoren von C-Erweiterungen für Ruby-Code verfügbar machen müssen, erstellen Sie eineIO-Instanz mitRUBY_IO_MODE_EXTERNALund verwenden Sierb_io_close(io), um sie zu schließen (dies unterbricht und wartet auch auf alle ausstehenden Operationen auf derIO-Instanz). Das direkte Schließen von File-Deskriptoren unterbricht keine ausstehenden Operationen und kann zu undefiniertem Verhalten führen. Anders ausgedrückt: Wenn zweiIO-Objekte denselben File-Deskriptor teilen, hat das Schließen des einen keine Auswirkung auf das andere. [Feature #18455]
-
GVL
rb_thread_call_with_gvlfunktioniert nun mit oder ohne GVL. Dies ermöglicht es Gems,ruby_thread_has_gvl_pzu vermeiden. Seien Sie bitte weiterhin sorgfältig mit dem GVL. [Feature #20750]
-
Set
-
Eine C-API für
Setwurde hinzugefügt. Die folgenden Methoden werden unterstützt: [Feature #21459]rb_set_foreachrb_set_newrb_set_new_caparb_set_lookuprb_set_addrb_set_clearrb_set_deleterb_set_size
-
Implementierungsverbesserungen
Ractor
Es wurde viel Arbeit geleistet, um Ractors stabiler, performanter und nutzbarer zu machen. Diese Verbesserungen bringen die Ractor-Implementierung näher an den Austritt aus dem experimentellen Status.
- Leistungsverbesserungen
- Gefrorene Strings und die Symboltabelle verwenden intern eine Lock-Free-Hash-Menge.
- Methoden-Cache-Lookups vermeiden in den meisten Fällen Sperren.
- Zugriff auf Instanzvariablen von Klassen (und Geniv) ist schneller und vermeidet Sperren.
- Cache-Konflikte werden bei der Objekterstellung vermieden.
object_idvermeidet in den meisten Fällen Sperren.
- Fehlerbehebungen und Stabilität
- Mögliche Deadlocks bei der Kombination von Ractors und Threads behoben.
- Probleme mit
requireundautoloadin einem Ractor behoben. - Kodierungs-/Transkodierungsprobleme über Ractors hinweg behoben.
- Race Conditions bei GC-Operationen und Methoden-Invalidierung behoben.
- Probleme mit Prozessen behoben, die nach dem Start eines Ractors geforkt wurden.
JIT
- ZJIT
- Einführung eines experimentellen methodenbasierten JIT-Compilers. Um
--zjit-Unterstützung zu aktivieren, bauen Sie Ruby mit Rust 1.85.0 oder neuer. - Ab Ruby 4.0.0 ist ZJIT schneller als der Interpreter, aber noch nicht so schnell wie YJIT. Wir ermutigen zur Experimentation mit ZJIT, raten jedoch derzeit davon ab, es in der Produktion einzusetzen.
- Unser Ziel ist es, ZJIT in Ruby 4.1 schneller als YJIT und produktionsreif zu machen.
- Einführung eines experimentellen methodenbasierten JIT-Compilers. Um
- YJIT
RubyVM::YJIT.runtime_statsratio_in_yjitfunktioniert im Standard-Build nicht mehr. Verwenden Sie--enable-yjit=statsbeiconfigure, um es bei--yjit-statszu aktivieren.invalidate_everythingzu den Standardstatistiken hinzugefügt, die erhöht wird, wenn jeder Code durch TracePoint invalidiert wird.
- Optionen
mem_size:undcall_threshold:zuRubyVM::YJIT.enablehinzugefügt.
- RJIT
--rjitwurde entfernt. Wir werden die Implementierung der Drittanbieter-JIT-API in das Repository ruby/rjit verschieben.
Verschiedene Änderungen
Siehe NEWS oder Commit-Logs für weitere Details.
Mit diesen Änderungen wurden 3776 Dateien geändert, 222800 Einfügungen(+), 293617 Löschungen(-) seit Ruby 3.4.0!
Herunterladen
-
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0-preview3.tar.gz
SIZE: 23865890 SHA1: a348f196e0314d8863ae5d5f0a588a37c52aa89c SHA256: 43d0926e776fbd5599adcc7bccb4ccc804e109f402a2068607a2a86562c2cdc0 SHA512: 1c7f10405832646eceacb278ea7cc3445dc0e1778e9a9331062f2fb0164d45ba5af0b4244dc6ae46e36730d6cafb4c4196fbd4f4fb74029afde5ecf4fd433a6b -
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0-preview3.tar.xz
SIZE: 17915004 SHA1: b7b99831558b9cd6cf8fb148f07cd4e8e59d9e99 SHA256: 8d7a503b2c4abcfacf0fa54ac56d37f7dd6d643a3a717661729cabbe947610a6 SHA512: b046c015a58daafb1640d8db62a36ebf64c7f83fbfb033fa327458afab6e9c31b1c2b194b347fd63f16e413e732d3e6ac20076282b433ef16923343c9ed84aa1 -
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0-preview3.zip
SIZE: 29403010 SHA1: 689cb6c497afb96d26745708e772b63afca52e1a SHA256: c29147727a8eacf01b942012e3d6fa26010f98f43f6ab249c391f47c744f44cf SHA512: c07d6069b391e38ec99725201d021998ccfb913423636f729eccd0cff17cb9ab7e8565f46d68eea96cf7f546cee647892ca3f37b720a202e8e5496cd10dd168b
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 3.4.8 veröffentlicht
Ruby 3.4.8 wurde veröffentlicht.
Veröffentlicht von k0kubun am 17. Dez 2025