Shopping cart

0

Cart

  • 0 item

Nessun prodotto nel carrello.

All categories
 Corso Gratuito di Programmazione Rust Lezione 014 – Cos’è il Concetto di Proprietà? Parte 2

SE VUOI PRENDERE LA CERTIFICAZIONE PER QUESTO CORSO CLICCA QUI

In Rust, il concetto di proprietà (ownership) gioca un ruolo fondamentale nella gestione della memoria e nella prevenzione di errori comuni come il double free, che possono portare a problemi di sicurezza. Vediamo come funziona in pratica.

Immagina di avere due variabili, s1 e s2, entrambe contenenti lo stesso valore di tipo String:

rust

let s1 = String::from("ciao");
let s2 = s1;

In molti linguaggi di programmazione, questo sarebbe un’operazione di copia, ma Rust gestisce le cose in modo diverso per garantire la sicurezza della memoria. Quando assegni il valore di s1 a s2, Rust non esegue una copia dei dati, ma sposta (o “muove”) il valore da s1 a s2. Questo significa che dopo questa assegnazione, s1 non è più valido e non puoi usarlo.

rust

println!("{}, mondo!", s1); // Questo non funzionerà!

Rust ti impedirà di utilizzare s1 dopo che è stata spostata in s2, per evitare errori potenziali. Invece, dovrai usare solo s2.

rust

let s1 = String::from("ciao");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);

Se vuoi creare una copia “profonda” dei dati di String, puoi usare il metodo clone(). In questo modo, stai effettivamente creando una nuova allocazione di memoria per i dati, evitando il problema del movimento della proprietà.

Inoltre, Rust ha una caratteristica speciale chiamata il trait Copy, che può essere applicato a tipi di dati che sono memorizzati interamente nello stack. Ad esempio, i tipi di dati come gli interi (i32), che hanno una dimensione nota a tempo di compilazione, implementano il trait Copy. Questo significa che quando assegni un valore di questi tipi a un’altra variabile, Rust effettuerà una copia dei dati invece che un movimento, e entrambe le variabili saranno ancora valide.

rust

let x = 5;
let y = x;

println!("x = {}, y = {}", x, y); // Questo funzionerà!

Inoltre, Rust ti fornisce controlli statici durante la compilazione per garantire che rispetti le regole di proprietà. Ad esempio, se provi ad utilizzare una variabile dopo averla spostata in una funzione, Rust ti segnalerà un errore statico. Questi controlli ti proteggono da molti errori comuni legati alla gestione della memoria.

Quindi, nel complesso, in Rust è fondamentale comprendere come funziona la proprietà e come vengono gestite le assegnazioni e i movimenti dei dati per garantire la sicurezza e la correttezza del programma.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *