Il 25 dicembre del 2025 è stata rilasciata Ruby 4.0, una versione particolarmente significativa perché coincide con il 30° anniversario della prima release pubblica del linguaggio.
Questa nuova versione introduce miglioramenti importanti in termini di performance, parallelismo e strumenti per sviluppatori, mantenendo allo stesso tempo una buona compatibilità con le versioni precedenti.
Vediamo nel dettaglio le novità più rilevanti.
ZJIT: un nuovo compilatore Just-In-Time
Una delle novità più interessanti di Ruby 4.0 è ZJIT, un nuovo compilatore Just-In-Time sviluppato dallo stesso team che ha creato YJIT.
A differenza di YJIT, che utilizza una tecnica di compilazione basata su lazy basic block versioning, ZJIT segue un’architettura più tradizionale, pensata per essere:
- più semplice da comprendere
- più facile da mantenere
- più accessibile ai contributi della community
Per attivarlo è possibile utilizzare il flag:
ruby --zjit my_script.rb
Attualmente ZJIT offre prestazioni migliori rispetto all’esecuzione interpretata, ma YJIT rimane la soluzione consigliata per ambienti di produzione. L’obiettivo di ZJIT è soprattutto creare una base solida per miglioramenti futuri del compilatore Ruby.
Ruby::Box: namespace isolati
Ruby 4.0 introduce anche Ruby::Box, una funzionalità sperimentale che permette di creare namespace isolati all’interno dello stesso processo Ruby.
Questo rende possibile caricare più versioni della stessa libreria contemporaneamente, riducendo i conflitti tra dipendenze.
La feature può essere abilitata tramite variabile d’ambiente:
RUBY_BOX=1
Esempio di utilizzo:
box1 = Ruby::Box.new
box1.require("some_gem", version: "1.0")
box2 = Ruby::Box.new
box2.require("some_gem", version: "2.0")
Tra i principali casi d’uso troviamo:
- test di aggiornamenti di librerie
- esecuzione di codice legacy insieme a dipendenze moderne
- isolamento di codice di terze parti
Essendo una funzionalità sperimentale, l’API potrebbe evolversi nelle versioni future.
Nuova API per i Ractor
I Ractor, introdotti nelle versioni precedenti di Ruby per gestire il parallelismo reale, hanno ricevuto un importante aggiornamento.
Ruby 4.0 introduce Ractor::Port, un nuovo meccanismo per gestire la comunicazione tra ractor.
port = Ractor::Port.new
r = Ractor.new(port) do |p|
p.send("Hello from Ractor!")
end
message = port.receive
puts message
Con questa modifica sono stati rimossi i metodi:
Ractor.yieldRactor#take
Il nuovo modello si ispira alla comunicazione tra processi (IPC), rendendo l’API più coerente con i paradigmi di programmazione concorrente.
Miglioramenti alla sintassi del linguaggio
Ruby 4.0 introduce anche piccoli miglioramenti alla sintassi che possono migliorare la leggibilità del codice.
Ora è possibile iniziare una nuova riga con operatori logici come &&, ||, and e or.
result = condition_one
&& condition_two
&& condition_three
Questa possibilità rende più leggibili espressioni condizionali lunghe o complesse.

