Home Rhyylen
Contatto
 
 
 
Rust Language
 
Introduzione

Rust è un linguaggio di programmazione general purpose pensato come alternativa alla consolidata coppia C/C++ (e agli altri alcuni dei quali consolidati o emergenti come Go, Nim e Zig) per la programmazione di basso livello e di sistema, inserendosi da protagonista in un'arena decisamente importante. Esso può essere anche proficuamente utilizzato per lo sviluppo di giochi e per la programmazione Web, ad esempio vedremo come si tratti di uno strumento perfettamente idoneo per lavorare con il ben noto standard conosciuto con il nome Webassembly. Da buon linguaggio moderno si propone molto bene anche come strumento per la programmazione concorrente. Insomma, possiamo adottarlo in ambito veramente general purpose, come detto.
In questa sede  non starò a ripercorrere la lunga (e un po' tediosa) storia della programmazione che potrete trovare ovunque sul Web e in molti libri che trattano di linguaggi.
Viceversa, vediamo un breve excursus, del tutto generico, sulle caratteristiche principali del linguaggio, senza perdere troppo tempo, avrete modo di apprezzare il tutto nel corso del nostro cammino.
Rust è un linguaggio compilato, come è normale che sia stante le finalità dichiarate,  che gira sulle solite diffuse piattaforme, Linux, Windows, BSD e Mac. Sotto il cofano c'è la ben nota ed apprezzata infrastruttura LLVM. I paradigmi di programmazione supportati sono:
  • imperativo e procedurale
  • funzionale
  • strutturato
  • orientato agli oggetti, pur non essendo esattamente un linguaggio puro object oriented come Java, Python, Ruby o C#
La sicurezza a livello di integrità dei dati e della memoria è perseguita in maniera quasi maniacale, i tipi dei dati vengono verificati già in fase di compilazione il che garantisce che per questo aspetto non si verifichino crash a runtime. La tipizzazione dei dati è forte e statica ed è supportata l'inferenza di tipo. La sicurezza della memoria è gestita tramite un complesso e innovativo sistema di regole che rende superflua, tra l'altro, la presenza di un garbage collector. Tra queste regole impareremo a conoscere i concetti di barrowing e ownership la cui natura può risultare molto utile nella scrittura di codice concorrente. L'apprendimento di questi meccanismi insieme a quello di lifetime è di certo il cardine principale del linguaggio. Tutto questo è disponibile senza dover sacrificare gli aspetti prestazionali e a questo proposito nell'ambito di Rust si parla anche di astrazione a costo zero il che appunto significa, in pratica, che costrutti di più alto livello, quando adoperati, non avranno impatto negativo sulle prestazioni. Aggiungiamo alle caratteristiche principali la presenza di un potente sistema di metaprogrammazione. Ciliegina sulla torta, è relativamente semplice (che non vuol dire banale) cooperare con il linguaggio C, con quanto ne consegue in termini di usabilità di codice scritto in quel linguaggio. Una nota di particolare merito va al compilatore che fornisce messaggi di errore spesso molto utili e chiari. Queste sono sostanzialmente le caratteristiche principali del linguaggio, lungi dall'aver sviscerato del tutto l'argomento, ritengo inutile scendere in ulteriori dettagli che intanto qui servirebbero a poco. Normalmente quello che è scritto nell'introduzione (ammesso che questa non venga saltata) viene presto dimenticato.

Nato intorno al 2010 inizialmente grazie a Graydon Hoare e successivamente portato avanti dalla Mozilla Foundation, Rust ha rapidamente scalato le classifiche di gradimento da parte di moltissimi sviluppatori venendo anche adottato da grandi realtà tra le quali spiccano, oltre ovviamente a Mozilla, anche Amazon, Cloudflare, Dropbox, Google, Oracle, Samsung e Facebook. La stessa Microsoft sta pesantemente adottando Rust al suo interno per lo sviluppo dei suoi prodotti e delle sue tecnologie e ne ha tratto ispirazione per il progetto Verona (che probabilmente non evolverà fino al prodotto finale). Anche questo consenso può essere prova della validità di questo linguaggio e del suo design. Intorno ad esso si è creata una comunità ampia di sviluppatori ed una buona base di conoscenza. L'evoluzione del linguaggio procede in maniera continua e ogni release aggiunge interessanti caratteristiche.

Punti negativi? Al di là dei gusti dei singoli programmatori, cui il linguaggio può più o meno piacere, forse uno solo è condiviso, ovvero la curva di apprendimento, che è generalmente abbastanza ripida. Niente che non si possa domare con un po' di pazienza, volontà e tanta voglia di chiedere ed informarsi, la comunità come detto è ampia e preparata, però insomma, un qualche sforzo bisogna farlo. La gestione della memoria può risultare un po' difficile da comprendere di primo acchito costringendo a qualche ragionamento di più, come detto si tratta di un modello innovativo (e per chi viene da altri linguaggi non c'è il comodo garbage collector). E altri aspetti del linguaggio possono risultare un po' complessi, trattandosi di un progetto molto ampio. Davvero molto ampio, vale pena ribadirlo e ricordarlo. A causa di ciò la stessa esposizione organica e completa di un argomento può risultare complessa, i rimandi tra un capitolo e l'altro sono (almeno per me ma guardando altri testi mi pare che capiti anche ad autori ben più preparati)  inevitabili proprio per l'intreccio che nasce dalle tante possibilità offerte. L'esposizione stessa dell'argomento tra testi diversi è completamente differente, in maniera ancora più vistosa di quanto ho visto per altri linguaggi, sarà una mia impressione, forse. Si vuole che i tempi di compilazione (ma questo aspetto non ci toccherà viste le dimensioni dei nostri "progetti") non siano i migliori del lotto, ed è probabilmente vero. Anche la sintassi si presenta a volte un po', come dire, particolare, almeno all'inizio dello studio. Se sperate insomma di ritrovare la semplicità di Python o Ruby, ecco, non è questo il caso.

Le procedure di installazione e di manutenzione sono, oltre che molto semplici, ben spiegate e facilmente reperibili sul sito ufficiale (è sufficiente scaricare il comodo tool rustup) e ritengo sia inutile ripeterle in questo ambito. Nel prosieguo mi limiterò a parlare specificamente del linguaggio, in particolare userò sempre esempi brevi ed incentrati sull'argomento che sto trattando, mentre vi invito, magari basandovi sulle tante innumerevoli fonti disponibili, a prendere confidenza con un altro eccellente strumento chiamato cargo. Oltre, ovviamente, ad utilizzare le tante fonti disponibili per avere più punti di vista di ciascun argomento. Come ho appena detto, mi concentrerò su un percorso di apprendimento molto schematico e basato su esempi semplici, che saranno centrati sull'argomento trattato. E' stato il mio percorso di apprendimento e potrebbe non essere adatto ad altri. La particolarità dei testi relativi a Rust è che sono davvero molto diversi tra di loro, questo accade anche con altri linguaggi ma non maniera così netta. E' un segno della ampiezza e forse anche della complessità del linguaggio a mio avviso.

NB: Durante questo percorso mi sono basato su numerose fonti esterne e testi. che sono elencati nella pagina dei ringraziamenti. Alcuni esempi sono stati creati da me, altri modificati, altri presi quasi identici in quanto a mio avviso pienamente rappresentativi dei concetti che stavo presentando. Questo non è un reference o un libro di testo sul linguaggio. E' il mio, personale, percorso di apprendimento.