Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Rust: un'introduzione

Rust: un'introduzione al linguaggio di programmazione e alla sua rivoluzionaria modalità di gestire della memoria
Rust: un'introduzione al linguaggio di programmazione e alla sua rivoluzionaria modalità di gestire della memoria
Link copiato negli appunti

Rust è un linguaggio di programmazione arrivato alla versione 1.0 nel 2015 dopo nove anni di incubazione iniziati da un progetto personale di un ricercatore impiegato nei laboratori di Mozilla. fondazione importantissima nel mondo informatico e particolarmente legata ad Internet.

In questa guida affrontiamo lo studio di Rust esplorandone gli angoli più remoti per imparare a comprenderlo ed utilizzarlo nei nostri progetti. Come spesso succede quando si inizia a studiare un nuovo linguaggio potrebbe capitare di chiedersi: ma perché proprio Rust? È cosi diverso dagli altri? Proprio per questo, nella prima lezione della guida, siamo interessati a mettere in luce i suoi aspetti salienti e innovativi. Per andare alla ricerca del "perché" oggigiorno convenga diventare un programmatore Rust.

Perché imparare a programmare con Rust

Rust è un linguaggio compilato, progettato per scrivere codice sicuro e performante. Fin qui, potrebbe sembrare il tipico slogan di promozione di una tecnologia. In questo caso però l'idea di fondo si basa proprio sul mettere insieme alcuni obiettivi primari dell'Informatica: il controllo totale sulle risorse di basso livello, come la memoria, associato ad una scrittura di codice produttiva per il programmatore e ad un risultato connotato da ottime prestazioni.

L'esito è stata una piattaforma di lavoro efficiente ma anche molto sicura. Tanto da essere impiegata in molti ambiti di estrema attualità tra i quali possiamo segnalare:

  • sviluppo di applicazioni da riga di comando e server per l'esecuzione ottimizzata di ogni genere di applicazioni;
  • scrittura di Web app in WebAssembly;
  • programmazione in Cloud. A titolo di esempio, citiamo la piattaforma AWS (Amazon Web Services) che, per questo linguaggio, ha pubblicato un intero SDK dedicato all'interazione con i suoi servizi;
  • sviluppo di sistemi embedded, proprio per la capacità di gestione puntuale delle risorse;
  • impiego nell'ambito delle blockchain come il framework Substrate.

Memory safety

Rust è definito come linguaggio memory safe. Cerca infatti di limitare al massimo gli errori dovuti alla gestione della memoria. Questa è una caratteristica che ha contribuito ad attirare molto interesse su di esso. Non a caso la memory safety rappresenta da sempre una delle tematiche principali della ricerca sui linguaggi informatici. Le violazioni in questo ambito rappresentano la causa di una percentuale molto alta delle vulnerabilità informatiche.
Facciamo un rapido excursus sulla questione. Quando si creano strutture dati viene allocata a questo scopo una certa area di memoria in cui inserire i relativi dati. Quest'area dovrebbe essere utilizzata senza causare scritture che ne vadano al di fuori e, una volta non necessaria, dovrebbe essere deallocata. Evitando così che per errore il codice continui a considerarla valida.

Molte vulnerabilità vengono prodotte proprio da violazioni di queste regole, portando all'accesso di aree dati non consentite o alla perdita di strutture dati. Vulnerabilità di questo genere possono causare malfunzionamenti o, peggio ancora, offrire una spalla a tentativi di violazione fraudolenta.

Rust e gestione della memoria

Nella storia dei linguaggi di programmazione, gli approcci alla gestione della memoria sono stati sostanzialmente due:

  • lasciare tutto il controllo nelle mani del programmatore: egli - ad esempio nel linguaggio C - è responsabile di allocare aree di memoria, usarle correttamente e deallocarle quando non più necessarie, facendo in modo che da quel momento in poi il codice non vi faccia più accesso;
  • impiego del garbage collector, come in Java dove il programmatore non controlla più la gestione della memoria. Egli infatti alloca le strutture dati di cui ha bisogno, le utilizza finché necessario e non si occupa di allocazione e deallocazione delle aree di memoria. Un meccanismo interno all'ambiente di esecuzione, detto garbage collector, si attiverà periodicamente per rimuovere le aree di memoria non più utilizzate.
    Questo approccio può essere considerato più sicuro perché non lascia nelle mani del programmatore un aspetto cosi importante. Ma è stato spesso tacciato di minori prestazioni in quanto il garbage collector è un meccanismo che consuma risorse.

Rust propone una terza via cercando di mantenere salde le prestazioni e la sicurezza: pone la sicurezza della memoria nelle mani del compilatore. Non esiste un garbage collector e se il compilatore porta a termine la compilazione significa che le norme di memory safety sono state rispettate: come presumibile, il linguaggio è interamente progettato per aiutare nel loro rispetto.

Parleremo diffusamente di questo approccio basato sui due meccanismi detti ownership e borrowing che, per ovvi motivi di completezza non approfondiamo in questo momento. Per ora ci interessa comprendere immediatamente dove risiede, in buona parte, la portata rivoluzionaria di Rust.

Ti consigliamo anche