Ruby 4.0: ecco tutte le novità principali

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.yield
  • Ractor#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.