Ruby è un linguaggio di programmazione orientato agli oggetti semplice - sia da apprendere sia da utilizzare - ma allo stesso tempo potente. Trova applicazione negli ambiti più disparati - dalla creazione di veri e propri programmi a quella di applicativi per il web grazie al framework Ruby on Rails - permettendo al programmatore di sviluppare programmi compatti, di facile lettura e manutenzione. Creato dal giapponese Yukihiro Matsumoto nella seconda metà del 1995, Ruby è il primo linguaggio di programmazione orientale ad ottenere un successo globale: merito anche di molte altre funzionalità che lo rendono duttile e potente.
La storia di Ruby
Come accaduto spesso negli ultimi decenni, l'esigenza che ha spinto Yukihiro Matsumoto (meglio conosciuto online con il nickname di Matz) a creare il nuovo linguaggio di programmazione sono strettamente personali. Nel corso di una discussione con un collega, emerge la necessità di ideare un nuovo linguaggio di programmazione (un vero linguaggio di scripting facile da utilizzare e, soprattutto, realmente orientato agli oggetti, per dirlo con le parole dello stesso Matsumoto) che sappia andare oltre Perl (ritenuto un linguaggio giocattolo) e Python (ritenuto non un vero linguaggio ad oggeti). La strada del fai da te, insomma, era l'unica realmente percorribile.
Ruby, il cui nome, ispirato all’omonima pietra preziosa, il Rubino, viene fatto per la prima volta nel corso di una sessione di chat tra Matsumoto e Keiju Ishitsuka nel 1993, è annunciato per la prima volta il 21 dicembre 1995 su un gruppo di discussione giapponese. Nel giro di due giorni Matsushiro e alcuni suoi colleghi riescono a rilasciare altre tre versioni di Ruby. Sin dalle primissime fasi di sviluppo il linguaggio di programmazione di Matz presenta tutte quelle caratteristiche peculiari – orientamento agli oggetti; classi; mixin; iteratori; chiusure; gestione delle eccezioni e garbage collection (letteralmente “gestione della spazzatura”) - che è possibile ritrovare anche nelle ultime versioni di Ruby: una costanza che è frutto di un preciso progetto di sviluppo e che ha rappresentato anche uno degli aspetti vincenti di questo linguaggio di programmazione.
Dal 1997 Matusmoto inizia a lavorare a tempo pieno sullo sviluppo e sul perfezionamento di Ruby: ciò permette al programmatore giapponese di raffinare alcuni aspetti della sua creatura e di permetterle di conquistare fama internazionale. Nel 1999 Ruby travalica i confini nipponici, mentre nel 2000 diventa uno dei linguaggi di programmazione più utilizzati in Giappone (tasso di adozione superiore a quello di Python).
Dalla versione 1.8 (rilasciata dell'agosto 2003) Ruby va incontro a un processo di standardizzazione che ne permette un'adozione più diffusa. Il processo di standardizzazione si conclude solo molti anni dopo: Ruby riceve la certificazione di standard giapponese solo nel 2011, mentre la certificazione internazionale avviene nel 2012.
Filosofia e caratteristiche
Ruby nasce seguendo una filosofia ben precisa: lo sviluppatore deve programmare divertendosi. “Spero che Ruby – ha affermato Yukihiro Matsumoto nel corso del Google tech talk del 2008 – aiuti i programmatori ad essere produttivi, a lavorare divertendosi e apprezzando il lavoro che stanno svolgendo. Questo è lo scopo primario del linguaggio che ho creato”. La creatura di Matz segue il principio della minor sorpresa (“Principle of least astonishment”, in inglese, o POLA): ciò vuol dire che il linguaggio di programmazione deve comportarsi in modo che le difficoltà che gli utenti esperti possano incontrare siano minime. Lo stesso ideatore di Ruby ha più volte ammesso che il suo scopo era creare ciò che lui stesso avrebbe trovato divertente da utilizzare e che gli avrebbe permesso di minimizzare il lavoro e, possibilmente, la confusione.
In questo modo si spiegano anche le caratteristiche principali di Ruby. Non si tratta, infatti, solamente di un linguaggio di programmazione orientato agli oggetti, ma anche dinamico, riflessivo e di utilizzo generale. Ciò vuol dire, ad esempio, che per i programmi scritti in Ruby non esiste la compilazione e l'esecuzione come due processi separati ed eseguiti in momenti differenti: un linguaggio di programmazione dinamico esegue le due operazioni contemporaneamente, permettendo di aggiungere codice, estendere classi di programmazione e le definizioni nel momento stesso in cui il programma è in esecuzione. Si tratta, dunque, di un linguaggio interpretato (esattamente come PHP) che non ha bisogno di un compilatore che traduca il codice in linguaggio macchina. La riflessione, invece, permette a programmi scritti in Ruby di andare ad agire direttamente sul codice sorgente del programma stesso, modificandolo e adattandolo in corso d'opera.
La creatura di Matsumoto, inoltre, si trasforma in uno dei linguaggi di programmazione per il web più potenti oggi in circolazione grazie all'adozione di librerie di codice come Sinatra e Rails. Ruby on Rails, in particolare, trova applicazione nei settori web più disparati ed è apprezzato per la sua intuitività e duttilità. Infine, si tratta di un linguaggio open source: chiunque può scaricarne il codice sorgente e migliorarlo o modificarlo per adattarlo alle proprie necessità.
Semantica e sintassi
La semantica di Ruby è strettamente legata agli oggetti: ogni singolo elemento di programmazione è un oggetto, incluse molte classi e istanze che altri linguaggi orientati agli oggetti trattano alla stregua di primitive (come gli interi, gli operatori booleani e il puntatore “null”). Ruby è stato descritto come un linguaggio multi-paradigma: permette la programmazione procedurale (la definizione di funzioni e variabili al di fuori degli oggetti le rende parte dell'Oggetto root principale), la programmazione funzionale (l'esecuzione del programma assume la forma di una serie di valutazioni di funzioni matematiche), la programmazione imperativa (il programma è inteso come una serie di istruzioni che possono essere impartite a mo' di comando alla macchina virtuale del linguaggio utilizzato) oltre che quella orientata agli oggetti, ovviamente. La sintassi è molto simile a quella di Perl e Python (cui Ruby si ispira), dove le definizioni di classi e metodi sono segnalati per mezzo di parole chiave.