Ruby 2.0.0 (la serie di rilascio completa è la 2.0.0-p0) è ora disponibile sotto forma di versione stabile; molte le novità incluse in questo aggiornamento, esse riguardano vari aspetti del linguaggio tra cui il core stesso, le librerie integrate, il supporto per il debug e il livello generale delle prestazioni.
Relativamente al core, si segnalano l'introduzione del literal "%i" per semplificare la generazione di vettori e simboli, UTF-8 come codifica predefinita per i caratteri Unicode, "__dir__" per la restituzione del dirname del file in esecuzione, l'integrazione di keyword arguments (o named parameters) per rendere più flessibile il design delle interfacce per la programmazione e, non ultimo, il nuovo metodo Module#prepend per l'estensione delle classi.
Per quanto riguarda invece le librerie built-in, Ruby 2.0.0 introduce una nuova convenzione, "#to_h", per le conversioni in Hash. Ad essa si aggiungono poi Enumerable#lazy e Enumerator::Lazy, per il lazy stream virtualmente infinito, e Enumerator#size and Range#size per la lazy size evaluation; si segnalano inoltre un'API per la gestione delle eccezioni asincrone e un nuovo motore per le espressioni regolari, Onigmo.
Le features per il debugging si arricchiscono del supporto per DTrace, con cui effetture analisi in corso s'esecuzione durante le fase di produzione, e di TracePoint per limitare la necessità di interruzioni a runtime; l'incremento delle prestazioni riguarda in particolare l'ottimizzazione delle operazioni su numeri reali, del Kernel#require e della Garbage collection attraverso algoritmo bitmap marking.
L'aggiornamento porta con sé anche alcune incompatibilità , da questo punto di vista andrebbe segnalata la rimozione di Iconv (API comunque già deprecata in Ruby 1.9), l'impossibilità di copiare file ".so" o ".bundle" senza il rischio di instabilità e malfunzionamenti nonché le possibili implicazioni del nuovo encoding che necessitano di un'analisi attenta prima dell'adozione in produzione dell'ultimo rilascio.
Da segnalare infine che la release 2.0.0 include i Refinements in via sperimentale, essi forniscono una soluzione per l'override di metodi senza coinvolgere altre parti di un'applicazione, una novità che introduce un nuovo concept per la modularità in Ruby.
Fonte: Ruby