Rust - from Mozilla

Introduzione               
 

Mozilla Foundation è nota al mondo per il browser Firefox. Quello che in parecchi non sanno è che si tratta di una realtà dinamica e appassionata dove molte persone altamente competenti creano software di ottimo livello. Spinti dalla passione e dalle grandi motivazioni (facilmente rafforzate dalla rivalità con le grandi software house ufficiali, Microsoft in primis) i tecnici di questo gruppo lavorano sempre alacremente. In questo ambito parliamo di un prodotto poco noto ai più ma estremamente interessante. Il linguaggio di programmazione Rust è una novità che, pur non ridisegnando le regole del gioco si propone, come strumento molto promettente, molto completo e in parte innovativo. Nonostante sia ancora abbastanza lontano dalla versione 1.0 se ne parla già abbastanza in rete. Buon segno, anche perchè i feedback sembrano unanimemente positivi, tranne che per qualche aspetto di cui parleremo in fondo a questo paragrafo.

Il progetto inizia nel 2006 per mano di Graydon Hoare. Nel 2009 entra in azione la comunità Mozilla e il tutto viene presentato sulla scena nel corso del 2010. Rust è un linguaggio compilato (nessuna virtual machine come strato intermedio) e multi paradigma. Esso abbraccia i paradigmi funzionale, object oriented (viene supportata l'ereditarietà singola con i traits di supporto mentre abbiamo la presenza dell'ormai quasi immancabile garbage collector), strutturato e imperativo, ha una forte predisposizione verso la programmazione concorrente; in ultima analisi si propone come strumento general purpose ma, ancor di più entra in gioco nell'ambito della programmazione di sistema, (tanto che sui forum si dice che Rust è indirizzato ai programmatori C++ "frustrati" dal loro linguaggio) in diretta concorrenza con strumenti nuovi, come Go e Clay, seminuovi, ad esempio il D e "vecchi" come il C. Come altri linguaggi con le stesse finalità, oltre ad essere compilato direttamente per la piattaforma sottostante, Rust ha una tipizzazione statica e di tipo forte e, come si vuole da uno strumento moderno, supporta l'inferenza di tipo. Se il target è quello delle applicazioni per client e per server non viene nemmeno dimenticato il Web. Per quanto riguarda la sintassi siamo dalle parti della solita coppia C/C++, niente di nuovo da questo punto di vista, con la presenza abbondante delle classiche parentesi graffe. Tra le altre caratteristiche la cura nel far si che non si abbiano accessi random in memoria (memory safety) e la "lotta" ai "dangling pointers", ovvero puntatori che riferiscono ad oggetti di tipo non appropriato. E previsto anche il supporto per la tipizzazione generica e per la metaprogrammazione. Abbiamo accennato alla programmazione concorrente che Rust supporta attraverso task "leggeri" con trasmissione di messaggi e senza condivisione di memoria.  Completiamo questo breve excursus segnalando che anche l'aspetto prestazionale sembrerebbe essere stato messo in primo piano in fase progettuale. Per inciso è possibile far cooperare Rust con C e con altri linguaggi che seguono le convenzioni idonee per l'interazione in particolare le C ABI (Application Binary Interface).

Rust trae aspirazione da parecchi linguaggi, Wikipedia nella voce dedicata ne riporta un bel po', in questo ambito mi piace sottolineare l'assimilazione di concetti provenienti da linguaggi funzionali quali Haskell al cui type system si ispira direttamente quello di Rust stesso. Si capisce quindi che fare un riassunto in poche righe di tutte le peculiarità non è semplice,  le caratteristiche sono davvero tante e moderne, si tratta di un linguaggio, a detta dei suoi stessi autori, particolamente ambizioso, e per questo anche un po' complesso.

Non possono, come al solito, non esserci controindicazioni. Va osservato che questo strumento non è così semplice da capire, apprendere e domare fino in fondo. Diversamente da altri strumenti analoghi che promettono e a volte permettono curve di apprendimento dolci vedrete che con Rust le cose non sono proprio così. Di questa possibile difficoltà di apprendimento si è discusso su qualche forum. Del resto il linguaggio è si dichiaratamente general purpose ma, come abbiamo già detto, la sua inclinazione privilegiata è quella della programmazione di sistema e come per tutti gli strumenti che vanno in quella direzione bene o male le cose non sono semplicissime, non possono esserlo. Un altro esempio recente per il quale si possono fare le stesse considerazioni è il già citato linguaggio Clay, anch'esso interessante, potente ma non banale (oltre che probabilmente, purtroppo, fermo nello sviluppo). Rust è "giovane" per cui è ancora, evidentemente, un po' presto per valutarlo appieno; il tempo ad esso devoluto potrebbe non essere ripagato nel futuro da una larga adozione che renda possibile utilizzarlo frequentemente "sul campo". E' un rischio che si corre quando si studia qualche cosa di nuovo che il mondo non ha ancora accettato in maniera diffusa e per il quale mancano tools e documentazione di alto livello. D'altronde ci vuole tempo, molto tempo, per raggiungere una certa capillarizzazione a livello di strumenti disponibili e diffusione della cultura.
Una questione un po' controversa nel senso che trova fautori e detrattori, è la maniacale ricerca da parte dei creatori di Rust di diminuire la digitazione dei caratteri durante la scrittura del codice; a questo fine troverete tante keyword abbreviate, tipo fn laddove altri linguaggi usano function o fun, pensate "corte" proprio per favorire la rapidità di digitazione. A voi stabilire se la leggibilità sia compromessa da quests "mania", tenendo presente che, al giorno d'oggi, gli IDE aiutano a tal punto il programmatore che, forse, la quantità di caratteri da digitare per richiamare le keywords non è proprio il probema maggiore. Però non fatevi distrarre da questo che è un aspetto decisamente marginale e eccessivamente discusso; Rust è molto ma davvero molto di più.

Poco altro da aggiungere; Rust è disponbile per Windows, Linux, Mac e BSD, come si conviene ad un linguaggio con la sua natura, ispirazione e soprattutto con le sue aspirazioni. A mio avviso è senza dubbio uno strumento che merita molta attenzione e che si propone, in termini di potenziale, come una delle alternative più interessanti per il prossimo futuro. Il sito dedicato è abbastanza ricco di documentazione, chiaramente insufficiente ad illustrane tutto quanto sta sotto il cofano ma comunque adatta per iniziare. La comunità intorno sembra in rapida crescita e molto disponibile verso i neofiti.
Di seguito il logo del linguaggio (che a me non dispiace...):