Ruby language
   

Introduzione                   

Eccoci ad uno dei linguaggi più in voga e dall'origine più particolare. Ruby non viene dal mondo occidentale, come gran parte dei linguaggi più usati ma dal Giappone e precisamente dall'ingegno di Yukihiro "Matz" Matsumoto, informatico che forse mai più si aspettava un simile successo della sua creazione. Successo che, come vedremo è dipeso anche da qualche fattore non strettamente dipendente dal linguaggio. Ruby nacque nella prima metà degli anni '90, precisamente fu concepito nel 1993 ed è stato presentato ufficialmente nel 1995. Le sue caratteristiche sono decisamente interessanti anche perchè col tempo si sono evolute fine a farne un linguaggio molto potente ed espressivo. Partiamo subito con una descrizione tecnica. Ruby è un linguaggio interpretato (il che, sgombrando il campo da illusioni, è penalizzante dal punto di vista prestazionale) eseguito quindi con una macchina virtuale sottostante. E' fortemente ispirato da altri linguaggi in particolare Smalltalk, Perl e Python ma anche Ada e Dylan.
  • E' un linguaggio fortemente object oriented, al punto che praticamente tutto è un oggetto in esso. Tuttavia è possibile anche programmare in maniera imperativa e funzionale. Inoltre Ruby supporta la "riflessione", reflection in inglese, ovvero la capacità di un programma di modficare a run time il comportamento di un oggetto.
  • E' tipizzato in maniera dinamica (io preferisco quella statica ma non si può avere tutto)
  • Sempre relativamente alla tipizzazione Ruby supporta il duck typing, che permette di individuare la semantica di un oggetto attraverso i suoi metodi e le sue proprietà. Questo aspetto facilita la metaprogrammazione.
  • Prevede la gestione automatica della memoria e la immancabile garbage collection.
  • E' implementata una completa gestione delle eccezioni.
  • Sono nativamente implementati i numeri razionali, i complessi ed è prevista la gestione di numeri con precisione arbitraria
  • Prevede l'ereditarietà singola con presenza di mixins (che vedremo cosa sono)
  • Supporta le continuations, ovvero esiste la possibilità di avere un controllo completo sull'ordine di esecuzione delle istruzioni
  • Ha una sintassi semplice e dovrebbe essere di facile apprendimento (come dico sempre comunque non esistono sistemi facili per risolvere tutti i problemi difficili)
Tuttavia le caratteristiche sono davvero tante e spero davvero di riuscire a mostrarne molte. Col tempo, come detto, il linguaggio si è molto arricchito (ad esempio dalla versione 1.9.1 abbiamo a disposizione una sitassi specifica per le funzioni lambda) e con la versione corrente, la 2.0, possiamo dire di essere di fronte ad un prodotto maturo.

Ruby, di suo, è inoltre accompagnato da una serie di librerie potenti e complete per ogni tipo esigenza e ne incontreremo alcune nel nostro cammino. Tuttavia è fondamentale segnalare un meccanismo molto interessante, a corollario del linguaggio, che è quelle delle cosidette "gemme" (RubyGems). Si tratta di un potente ma semplice sistema di gestione di pacchetti che permette di installare facilmente classi e librerie aggiuntive, in questo modo si possono avere facilmente a disposizione estensioni al linguaggio. Col tempo imparerete, come è successo a me, ad apprezzare molto l'efficienza di questo strumento ma soprattutto l'enorme numero e varietà di gemme disponibili (non tutte davvero utili ma ce n'è per tutti i gusti) e per le quali esiste un repository dedicato.

La diffusione di questo linguaggio si è avuta in grande stile piuttosto recentemente, ovvero dal 2005 in avanti quando si è diffuso uno strumento, Ruby on Rails (RoR), che ne ha rivoluzionato la percezione. Si tratta di un framework che permette la crazione di potenti applicazioni web basate sull'approccio MVC (model - view - controller). Tale paradigma si successivamente largamente diffuso anche per altri linguaggi. Molto interessante, parlando di Ruby e Web, anche il progetto Sinatra che affronta il problema dello sviluppo di applicazioni Internet secondo un approccio innovativo che avuto alcuni imitatori legati ad altri linguaggi. Tuttavia fu Ruby on Rails il vero traino per il linguaggio Ruby. Qusto strumento, scritto in Ruby, valido e moderno in se stesso, fece conoscere al mondo il frutto del lavoro di Matz e di lì in poi fu una crescita che ha portato questo linguaggio stabilmente tra i 10 - 15 più utilizzati nel mondo della programmazione, almeno secondo il noto sito di rilevazione Tiobe. Anche Rails si è evoluto nel tempo contribuendo sempre fortemente ad aumentare l'interesse per "il linguaggio che viene dall'Oriente". La simbiosi tra i due è così stretta che a volte Ruby e il framework Rails vengono confusi, ad alcuni neofiti non ne è chiara la linea di demarcazione.

Una comunità attiva e dinamica ormai diffusa in molti paesi e varie lingue, tra cui naturalmente l'italiano, una documentazione, tra libri e siti dedicati, accessibile e completa, fanno da cornice a questo strumento ormai consolidato.

Tutto bene quindi, si direbbe. Di contro, tuttavia, si può eccepire certamente in sugli aspetti prestazionali. Nonostante molti progressi in questo senso in particolare con l'inclusione nativa di una macchina virtuale più efficente chiamata YARV (Yet Another Ruby VM, ne esistono comunque altre) che ha portato incrementi a volte dell'ordine del 400%, su questo aspetto non si può nemmeno fare un paragone vero con il C e con altri linguaggi compilati. A mitigare un po' il problema c'è il fatto che non è difficile interfacciarsi col C stesso laddove l'aspetto prestazionale sia preminente; però dovete avere anche codice scritto in un altro linguaggio oltre a Ruby a vostra disposizione, questo fatto, che può risultare poco simpatico, va evidenziato. Altre grosse problematiche non ne vedo, il fatto che un linguaggio piaccia o meno è anche una questione di gusti personali. Segnalo comunque che tra le cose un po' controverse c'è il fatto che Ruby permette, a volte, di svolgere la stessa operazione in più modi diversi. Vedremo alcuni esempi nel nostro percorso; ad alcuni questa cosa piace perchè si può variare l'espressività e la leggibilità secondo i propri gusti, ad altri sembra un inutile appesantimento. Ad esempio Guido VanRossum, il creatore di Python ha riscritto alcune cose del suo linguaggio cercando di abbracciare la filosofia del "un solo modo per fare ogni cosa". Inutile discuterne ulteriormente, non ne usciamo e ognuno rimarrà con le sue convinzioni su quale approccio sia migliore.

Quanto costa Ruby? Come quasi tutti i linguaggi di recente creazione è disponibile gratuitamente per tutte le piattaforme più diffuse. Numerosi sono gli strumenti per scrivere codice con questo linguaggio, un editor di testo a vostra scelta, di facile reperimento sul web, potrà farvi da compagno all'inizio dell'apprendimento. Ruby è dotato di una ottima console interattiva che potete lanciare con il comando irb. Normalmente non faccio ricorso alle console interattive perchè credo che avere programmi fatti finiti e funzionanti sia il modo migliore per imparare; tuttavia in questo caso ne farò senz'altro uso per illustrare semplici concetti di immediata comprensione e comunque mi sono personalmente trovato bene, durante studio di Ruby, nell'appoggiarmi su questo strumento... sarà il linguaggio, non so, fatto sta che lo userò più del solito. D'altronde per far girare un programma ruby non ci vuole gran che... scrivere le istruzioni ed avviare l'interprete, non sono necessarie premesse particolai, niente "public static void main" ecc.... è tutto molto ma molto semplice.