Rust - from Mozilla

Rust è un linguaggio di programmazione pensato per la programmazione di sistema immettendosi così in quel filone che comprende anche altri strumenti recenti come ad esempio Go e il poco conosciuto Nimrod, meno recenti, come il linguaggio D e che si propongono come alternative all'affermata coppia C/C++. Lo sviluppo è curato dalla Mozilla Foundation il che costituisce senza dubbio un punto a favore considerando l'autorevolezza e la competenza di quel gruppo. Come spiegato nelle pagine della documentazione ufficiale il suo target ideale sono grandi applicazioni ad alte prestazioni e per questo le caratteristiche di Rust non possono che essere molto interessanti per un programmatore. Di seguito vediamo una panoramica molto parziale:

  • Approccio multiparadigma - è possibile programmare in modalità funzionale, imperativa ed object oriented (con uso dei traits)
  • Tipizzazione statica e forte - ideale per la programmazione di sistema
  • Inferenza di tipo - Il tipo di una variabile può essere può dedotto dal compilatore senza che esplicitamente dichiarato
  • Task leggeri - favoriscono la concorrenza attraverso il dialogo via messaggi e senza condivisione di memoria
  • Funzioni di ordine superiore - funzioni che possono usare altre funzioni come parametri
  • Polimorfismo - Rust dispone di funzioni con parametrizzazione di tipo e di meccanismo tipici della programmazione OO
  • Garbage Collector - per una gestione automatica della memoria

Non è tutto cui ovviamente e vedremo piano piano molti altri aspetti interessanti, ad esempio 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. Anche l'aspetto prestazionale sembrerebbe essere stato messo in primo piano in fase progettuale ed inoltre 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). Sottolineo ancora la forte predisposizione per il supporto alla programmazione concorrente, anch'essa una caratteristica necessaria in un moderno linguaggio.

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. 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ù.

Inoltre certamente non va sottovalutata la forza e la spinta che possono venire dalla Mozilla Foundation stessa, capace senza dubbio di raccogliere una buona comunità e di fornire un supporto di prim'ordine alla sua creatura.

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...):