Vyšlo Ruby 4.0.0: velký release s důrazem na výkon a stabilitu

Ruby 4.0.0 vyšlo 25. prosince 2025 a jde o jednu z největších aktualizací Ruby za poslední roky. Přináší experimentální Ruby Box pro izolaci definic, nový JIT kompilátor ZJIT, výrazné posílení Ractorů a dlouhý seznam změn ve standardní knihovně i bundled gemech včetně RubyGems a Bundler 4.
25. prosince 2025 bylo oficiálně oznámeno vydání Ruby 4.0.0, které přináší nové funkce jako „Ruby Box“, „ZJIT“ a spoustu vylepšení.
Ruby Box
Ruby Box je nová (experimentální) funkce, která poskytuje izolaci definic. Když je prostředí spuštěno s proměnnou prostředí RUBY_BOX=1, aktivuje se Ruby Box a definice načtené v boxu jsou izolované uvnitř tohoto boxu. To znamená, že změny typu:
- monkey patching
- změny globálních nebo třídních proměnných
- definice tříd nebo modulů
- načtené nativní nebo Ruby knihovny
zůstanou uzavřené v daném boxu a neovlivní ostatní boxy nebo hlavní prostředí.
Očekávané použití zahrnuje například:
- spouštění testů v izolaci, aby nedocházelo k interferencím,
- paralelní provoz webových aplikací uvnitř jednoho procesu,
- bezpečné vyhodnocování změn závislostí přesněji a bez vedlejších efektů,
- nebo jako nízkoúrovňové API pro budoucí implementaci balíčkovacího systému.
Pro detaily k Ruby Boxu doporučuji podívat se na Ruby::Box.
ZJIT
ZJIT je nový just-in-time kompilátor, který je vyvíjen jako nová generace JIT kompilátoru pro Ruby jako nástupce YJIT. Ruby sice stále podporuje YJIT, ale ZJIT má za cíl:
- zvýšit výkon díky větším kompilovaným jednotkám a SSA IR,
- podpořit více přispěvatelů díky tradičnější metodě kompilace.
ZJIT je zapnut pomocí --zjit , který musí být specifikován, a k jeho sestavení je potřeba Rust 1.85.0 nebo novější. Ačkoliv je ZJIT rychlejší než čistý interpreter, zatím ještě nedosahuje výkonu YJIT ve všech situacích. Vývojáři doporučují experimentovat s ZJIT, ale zatím zvážit jeho použití v produkci až v příštích verzích, například v Ruby 4.1.
Vylepšení Ractorů
Ractor, paralelní mechanismus pro Ruby představený již v Ruby 3.0, dostává v Ruby 4.0 několik důležitých aktualizací. Nejvýraznější změny:
- zavedení nové třídy
Ractor::Portpro odesílání a přijímání zpráv mezi Ractory – to řeší problémy s efektivní komunikací mezi paralelními vlákny, - přidání
Ractor.shareable_procpro snadnější sdílení Proc objektů mezi Ractory, - interní vylepšení datových struktur, která snižují obsahování globálního zámku a zlepšují paralelní výkon,
- Ractory nyní sdílejí méně interních dat, díky čemuž se snižuje konfliktní přístup a zvyšuje CPU cache efektivnost při paralelních bězích.
Ruby tým uvádí, že po těchto vylepšeních plánuje v příští verzi odstranit označení Ractorů jako experimentálních.
Změny v jazyce
Ruby 4.0 obsahuje několik jazykových úprav:
- výraz
*nilnyní nevolánil.to_a, což je v souladu s tím, jak**nilnechce volatnil.to_hash, - logické binární operátory jako
||,&&,and,orna začátku řádku pokračují z předchozího řádku – fungují podobně jako když začínáte řetězení metod s tečkou.
To zlepšuje konzistenci jazyka a zabraňuje neočekávanému chování v některých syntaktických situacích.
Aktualizace základních tříd
Ruby 4.0 přináší i mnoho změn a nových metod v základních třídách systému:
- do třídy
Arraybyly přidány metodyArray#rfinda nová implementaceArray#find, Binding#local_variablesuž neobsahuje číslované parametry a několik nových metod vBindingpřidává přístup k implicitním parametrům,Enumerator.producenyní přijímá volitelný klíčový argumentsizepro explicitní určení velikosti generovaných sekvencí,- ve výpisu chyb o argumentech (
ArgumentError) se nyní zobrazují ukázky kódu pro volání i definici metody, což usnadňuje debugování, FiberaFiber::Schedulerdostaly nové schopnosti, například přerušení fiber s výjimkou a yield scheduleru tak, aby IO operace mohly lépe reagovat,File::Stat#birthtimeje nyní na Linuxu dostupný pomocístatxkde je podporován,IO.selectnyní přijímáFloat::INFINITYjako timeout,- některé historické chování (např. tvorba procesu pomocí
IOmetod s|prefixem) bylo odstraněno, Kernel#inspectnově respektuje metoduinstance_variables_to_inspectpro vlastní výpis instančních proměnných.
Mezi další změny patří aktualizace Unicode na verzi 17.0.0 pro řetězce a regulární výrazy a zlepšení podpory funkcí v Thread a v standardní knihovně.
Shrnutí
Ruby 4.0.0 je významná verze, která představuje nové experimentální funkce jako Ruby Box, nový JIT kompilátor ZJIT, výrazná vylepšení Ractorů a mnoho užitečných jazykových i standardních knihovních úprav. Vývojáři Ruby pokračují v kultivaci jazyka tak, aby byl rychlejší, bezpečnější a lépe použitelný ve složitých projektech.
Pro více informací: https://www.ruby-lang.org/en/news/2025/12/25/ruby-4-0-0-released/