Rust - from Mozilla

Introduzione               
 

Eccoci a parlare di uno strumento che si farà conoscere nel prossimo futuro vuoi per i suoi meriti intrinseci vuoi per la forte community che lo sostiene, Mozilla Foundation. Rust è un linguaggio di programmazione di sistema quindi si affianca a  linguaggi, come C/C++ e Go. Come scritto sulla pagina ufficiale esso si concentra intorno a 3 scopi:

- sicurezza
- velocità
- concorrenza

ecco le 3 parole che hanno fatto da guida agli autori.

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, strutturato e imperativo ed object oriented ( in questo ambito viene supportata l'ereditarietà singola con i traits di supporto mentre non abbiamo un  garbage collector che era stato inizalmente implementato e successivamente rimosso, qui trovate una approfondita discussione in merito). Rust ha una forte predisposizione verso la programmazione concorrente e in ultima analisi si propone come strumento general purpose ma, ancor di più entra in gioco nell'ambito, come detto, 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 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.

Il linguaggio è arrivato ad una situazione di stabilità ed usabilità, dopo che nelle versioni preliminari c'era stato un certo caotico susseguirsi di decisioni anche a livello sintattico.

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 (dopo qualche inaccuratezza nelle primissime versioni, 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...):