Was sind nicht-lexikalische Lebenszeiten (non-lexical lifetimes) in Rust?
Hallo Kollegen! Ich habe vor kurzem angefangen, Rust zu lernen, und bin auf das Konzept der Lebenszeiten (lifetimes) gestoßen. Grundsätzlich habe ich es verstanden: Der Compiler prüft, dass Referenzen nicht in der Luft hängen, und verwendet dafür Annotationen wie `'a`.
Aber ich stoße ständig auf den Begriff "non-lexical lifetimes" (NLL). Ehrlich gesagt ist mir aus der offiziellen Dokumentation nicht ganz klar, wie sie sich von den normalen, "lexikalischen" Lebenszeiten unterscheiden. Ich bin gewohnt, dass die Lebenszeit einer Variable durch ihren Sichtbarkeitsbereich bestimmt wird – einen Block in geschweiften Klammern `{}`. Zum Beispiel:
```rust
fn main() {
let r; // ---------+-- 'a
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
println!("{}", r); // |
}
```