Quando si definisce una struttura, non si crea una relazione tra la durata della struttura e la durata dei campi. Come si fa notare, i riferimenti nei campi hanno per vivere più a lungo della struttura.
Invece, quello che stai facendo è fornire una "vita generica" che sarà specializzata quando crei la struttura. Questo è simile ad avere una struttura con un parametro di tipo:
struct Foo<T>
foo: T,
}
Quando si costruisce la struct, vite appropriate (o tipi) verrà inserito dal compilatore, e poi controlla che tutto funziona ancora fuori.
L'altra cosa è che è possibile specificare i tempi di vita rispetto gli uni agli altri:
struct Line<'a, 'b : 'a> {
start: &'a Point,
end: &'b Point
}
Qui, lei sta dicendo che start
e end
può avere diverse vite, a condizione che la durata di fine outlives la durata di inizio.
perché il compilatore non esegue l'elisione a vita per le strutture? Sembra che nel spirito di Rust a farlo
(sottolineatura mia)
Io in realtà credo che Rust tende verso esplicitazione, soprattutto quando si tratta di definire gli elementi di primo livello (come funzioni , structs).
Le regole per l'elisione a vita per le funzioni hanno uno scopo piuttosto ridotto ed erano empirically found con un alto tasso di successo (87%). Questo è stato un ottimo ritorno sull'investimento ergonomico.
Forse a un certo punto, si verificheranno elisioni simili per le strutture, ma non è stato un problema abbastanza grande eppure. Se ti senti fortemente a favore di questo, ti consiglio vivamente di chiedere un consenso sullo user forum, passando al forum degli sviluppatori, quindi alla fine facendo un RFC.
Mentre suppongo sia possibile che Rust possa scegliere di elidere le vite in una definizione di struttura, non lo fa ora. Vedrai solo il termine 'elisione a vita 'usato per funzioni/metodi. – Shepmaster