Sto cercando di abbeverare vite in Rust e mi sono chiesto se sono "solo" una misura di sicurezza (e un modo per comunicare come la sicurezza è garantita, o meno, in caso di errori) o se ci sono casi in cui diversi le scelte di vita cambiano effettivamente come funziona il programma, cioè se le vite fanno una differenza semantica al programma compilato.Le durate di Rust influenzano la semantica del programma compilato?
E con "vite" mi riferisco a tutti i fastidiosi piccoli 'a
, 'b
, 'static
marcatori includiamo per fare il correttore prestito felice. Naturalmente, la scrittura
{
let foo = try!(File::open("foo.txt"));
}
foo.write_all(b"bar");
invece di
let foo = try!(File::open("foo.txt"));
foo.write_all(b"bar");
chiuderà il descrittore di file prima che avvenga la scrittura, anche se abbiamo potuto accedere foo dopo, ma quel tipo di scoping e distruttore insulti accade anche in C++.
La distinzione tra tempi di vita concreti e parametri generici di durata è davvero utile. Usando le stesse parole per entrambi, le spiegazioni che ho letto finora mescolano insieme entrambi i * concetti *. – Perseids
@Persidi parlando onestamente, non sono sicuro che questi siano i termini accettati, ma sto facendo del mio meglio per renderli tali.^_^Sto anche cercando di essere migliore nel dire l'uno o l'altro quando sono ambigui, ma è così dannatamente conveniente dire semplicemente "vita". – Shepmaster
Qui potremmo entrare nelle erbacce, ma potrebbe essere utile chiarire la dichiarazione secondo cui tutti i linguaggi di programmazione hanno vite concrete. Quando si utilizza la garbage collection, le durate possono essere effettivamente * dinamicamente * estese, il che non è il caso delle durate come descritto dai parametri di vita di Rust, che sono solo costrutti in fase di compilazione (dovresti usare qualcosa come il puntatore 'Rc' per estensione dinamica della vita come se fossi in un linguaggio spazzato). –