Esistono già tanti linguaggi di pro­gram­ma­zio­ne, da C++ a Pascal a Java, eppure ne vengono svi­lup­pa­ti sempre di nuovi, che devono essere più semplici, più sicuri oppure più veloci. Il lin­guag­gio di pro­gram­ma­zio­ne Rust soddisfa tutti e tre i requisiti allo stesso tempo e riscuote perciò grande successo. Secondo un sondaggio tra utenti e svi­lup­pa­to­ri della piat­ta­for­ma Stack Overflow nel 2019 Rust è stato il lin­guag­gio di pro­gram­ma­zio­ne preferito da tutti.

Cos’è Rust?

Il lin­guag­gio di pro­gram­ma­zio­ne Rust è stato svi­lup­pa­to nel 2010 da Mozilla. All’inizio era con­si­de­ra­to più che altro un pas­sa­tem­po per gli svi­lup­pa­to­ri di Mozilla, che poi l’hanno uti­liz­za­to in modo concreto per svi­lup­pa­re un nuovo motore di browser per Firefox. Nel frattempo si è evoluto in un progetto open source a cui lavora una community attiva, ma è sempre Mozilla a fi­nan­zia­re il progetto.

Il lin­guag­gio di pro­gram­ma­zio­ne si muove tra i linguaggi a basso livello C e quelli più astratti come Java. Ma Rust è prin­ci­pal­men­te un lin­guag­gio per la pro­gram­ma­zio­ne di sistema, vale a dire uno di quei linguaggi con cui rea­liz­za­re sistemi operativi o ap­pli­ca­zio­ni stret­ta­men­te collegate a Windows, Linux o macOS. Allo stesso tempo, però, Rust viene uti­liz­za­to anche nella pro­gram­ma­zio­ne di ap­pli­ca­zio­ni web, e quindi su un livello molto più basso.

Par­ti­co­la­ri­tà di Rust

Il più grande vantaggio di Rust rispetto agli altri linguaggi di pro­gram­ma­zio­ne risiede nella sicurezza, che si raggiunge, tra le altre cose, con la gestione degli errori. Se durante la com­pi­la­zio­ne si verifica un errore che non si riesce a riparare, si avvia la co­sid­det­ta macro “panic!” cor­ri­spon­den­te, che sistema il tutto e invia una notifica di errore per non provocare danni.

Anche la gestione del sal­va­tag­gio promette sicurezza. Il vantaggio sta nel fatto che Rust raggiunge la “memory safety” senza un “garbage collector”. Negli anni, in molti linguaggi di pro­gram­ma­zio­ne, la memoria è stata un punto d'attacco molto amato dagli hacker. Se una memoria si riempie, lo comunica come errore al sistema evitando così di creare una falla da sfruttare. Un “garbage collector” fa in modo che gli oggetti non necessari non spa­ri­sca­no dal sistema. Tuttavia, questo rallenta l'e­se­cu­zio­ne del codice. Il com­pi­la­to­re di Rust rende il “garbage collector” obsoleto. Questo perché, già durante la fase di com­pi­la­zio­ne, viene ve­ri­fi­ca­ta l'e­ven­tua­le pos­si­bi­li­tà di errori in memoria.

In questo caso, però, le elevate funzioni di sicurezza non com­pro­met­to­no le pre­sta­zio­ni. Rust è un lin­guag­gio per la pro­gram­ma­zio­ne di sistema come C/C++ e ga­ran­ti­sce anche la stessa velocità durante l'e­se­cu­zio­ne. Questo è collegato da una parte alla rinuncia a un “garbage collector” e dall’altra al fatto che gli “zero cost ab­strac­tions” ga­ran­ti­sco­no un’elevata velocità per tutta la durata. Quest’espres­sio­ne significa sem­pli­ce­men­te che si può pro­gram­ma­re in astra­zio­ne senza dover ri­nun­cia­re alle pre­sta­zio­ni per questa comodità.

Quest’ultimo fattore rende Rust un mix tra i linguaggi di pro­gram­ma­zio­ne ad alto livello e a basso livello. Si­mil­men­te a C/C++, Rust è molto vicino all’hardware, che ga­ran­ti­sce un’elevata velocità, ma può essere pro­gram­ma­to in modo re­la­ti­va­men­te semplice, come noto ai linguaggi ad alto livello.

Inoltre sia i prin­ci­pian­ti sia i pro­gram­ma­to­ri più avanzati possono orien­tar­si con Rust. Per quel che riguarda il suo utilizzo, il lin­guag­gio si dif­fe­ren­zia di poco dalle sue note al­ter­na­ti­ve. Un grosso vantaggio risiede però nell’impegno con cui sono state concepite le notifiche di errore. Se altri linguaggi di pro­gram­ma­zio­ne co­mu­ni­ca­no solo gli errori criptici, Rust trasmette se­gna­la­zio­ni utili e si­gni­fi­ca­ti­ve su come riparare l'errore.

Consiglio

Rust è un lin­guag­gio di pro­gram­ma­zio­ne for­te­men­te sup­por­ta­to da We­bAs­sem­bly. Per questo Rust si rivela utile anche per svi­lup­pa­re ap­pli­ca­zio­ni veloci per il web.

Sintassi di Rust con esempio

La sintassi di Rust, a prima vista, è molto simile a quella di C o C++, altri linguaggi per la pro­gram­ma­zio­ne di sistema. Come accade con questi, anche con Rust si lavora con funzioni, cicli, richieste, costanti e variabili. La posizione delle parentesi può variare, come sappiamo dai linguaggi più datati, ma il principio rimane lo stesso. Na­tu­ral­men­te Rust ha le sue par­ti­co­la­ri­tà:

  • Il comando “fn” definisce le nuove funzioni.
  • Il lin­guag­gio lavora con macro, con­tras­se­gna­te da un punto escla­ma­ti­vo alla fine della funzione.
  • Le variabili si de­fi­ni­sco­no con “let”. La modifica dei dati richiede il consenso esplicito con “mut”.
  • Rust ha una con­ce­zio­ne par­ti­co­la­re di Ownership.

Nella sintassi di Rust, con Ownership s’intende il rapporto di una variabile con il suo valore. La par­ti­co­la­ri­tà sta nel fatto che un valore preciso può ap­par­te­ne­re a una sola variabile. Se si trasmette il valore, la variabile non è più di­spo­ni­bi­le.

fn main() {
let hello = String::from("Hello, world!");
let hello1 = hello;
println!("{}", hello);
}

Questo codice non può fun­zio­na­re così: il contenuto di “hello” è stato trasmesso a “hello1” e perciò non può più essere invocato nella macro. Al suo posto bisogna integrare la nuova variabile nell’ultimo comando per ottenere un risultato corretto.

fn main() {
let hello = String::from("Hello, world!");
let hello1 = hello;
println!("{}", hello1);
}
In sintesi

Rust offre più sicurezza, pre­sta­zio­ni maggiori e un utilizzo più semplice. Cio­no­no­stan­te il lin­guag­gio di pro­gram­ma­zio­ne non prende una strada del tutto nuova, ma si co­strui­sce su elementi già noti per esempio da C/C++, offrendo però nuove in­te­res­san­ti ca­rat­te­ri­sti­che. So­prat­tut­to quando si è già pratici con gli altri linguaggi, il passaggio a Rust non è per nulla difficile.

Chi vuole ci­men­tar­si con il moderno lin­guag­gio di pro­gram­ma­zio­ne, può trovare nel nostro tutorial di Rust i primi passi da seguire.

Vai al menu prin­ci­pa­le