Ruby 4.0: ecco tutte le novità principali

Controllo dell’output di inspect

Quando si utilizza inspect per il debugging, spesso vengono mostrate variabili interne usate per memoization o caching.

Ruby 4.0 introduce il metodo instance_variables_to_inspect, che consente di controllare quali variabili di istanza includere nell’output.

def instance_variables_to_inspect
  [:@width, :@height]
end

In questo modo l’output di inspect può essere reso più pulito e focalizzato sullo stato principale dell’oggetto.

Set diventa una core class

La classe Set è stata promossa da libreria standard a core class.

Questo significa che non è più necessario importarla manualmente con:

require 'set'

Inoltre il metodo inspect restituisce ora un formato più leggibile e compatibile con eval.

Va segnalato che SortedSet è stato rimosso e può essere utilizzato tramite la gem sorted_set.

Pathname integrato nel core

Anche Pathname è stato promosso a core class.

Questo miglioramento elimina la necessità di gestire la gem separatamente e consente una migliore integrazione con il resto dell’ecosistema Ruby.

Miglioramenti a source_location

Il metodo source_location è stato esteso e ora restituisce cinque valori invece di due:

[path, start_line, start_column, end_line, end_column]

Questa informazione aggiuntiva è particolarmente utile per:

  • strumenti di analisi del codice
  • debugger
  • IDE e editor avanzati

Miglioramenti alle stringhe

Il metodo String#strip e le sue varianti ora accettano argomenti per specificare quali caratteri rimuovere.

text.strip(" ", "\t", "\n")

Questo rende l’operazione di pulizia delle stringhe più flessibile.

Nuovi metodi matematici

Ruby 4.0 introduce anche due nuove funzioni nel modulo Math:

  • Math.log1p
  • Math.expm1

Queste funzioni permettono calcoli più precisi per valori molto piccoli, particolarmente utili in contesti scientifici o finanziari.

Altri cambiamenti rilevanti

Tra le altre novità introdotte nella nuova versione troviamo:

  • *nil non invoca più nil.to_a
  • IO.select supporta Float::INFINITY come timeout
  • File::Stat#birthtime ora funziona anche su Linux
  • Socket.tcp supporta il parametro open_timeout
  • aggiunti Ractor#join e Ractor#value
  • rimozione di RJIT
  • aggiornamento del supporto Unicode alla versione 17

Conclusioni

Ruby 4.0 rappresenta un passo importante nell’evoluzione del linguaggio. Le novità principali si concentrano su:

  • miglioramenti delle performance
  • evoluzione del parallelismo
  • strumenti migliori per debugging e sviluppo

Grazie alla buona compatibilità con le versioni precedenti, l’aggiornamento dovrebbe essere relativamente semplice per la maggior parte dei progetti esistenti.

Con queste novità, Ruby continua a evolversi mantenendo il suo obiettivo storico: rendere la programmazione più semplice, espressiva e produttiva.