Rust · Avançado · Inglês · Técnico
non-lexical lifetimes
Regra do compilador, ativa desde a edição 2018, em que um empréstimo termina no último uso da referência, e não no fim do bloco onde ela foi declarada.
Onde usar
Explica por que código que antes dava erro de borrow hoje compila. É o motivo de poder alterar um vetor logo depois do último uso de uma referência a ele.
Em código
let mut v = vec![1, 2, 3];
let primeiro = &v[0];
println!("{primeiro}");
// primeiro não é mais usado
v.push(4);Exemplos
NLL lets this compile because the borrow ends early.
O NLL deixa isso compilar porque o empréstimo acaba antes.
That error disappeared after non-lexical lifetimes.
Esse erro sumiu depois dos non-lexical lifetimes.
Cuidado
Não vale quando o valor emprestado tem Drop que usa a referência: nesse caso o destrutor conta como um uso no fim do escopo.
Sinônimos
NLL