Avatar ·

Que sont les durées de vie non lexicales (non-lexical lifetimes) en Rust ?

Bonjour, collègues ! J'ai récemment commencé à apprendre Rust et je suis tombé sur le concept de durées de vie (lifetimes). J'ai à peu près compris les bases : le compilateur vérifie que les références ne sont pas pendantes, et pour cela il utilise des annotations comme `'a`. Mais je tombe constamment sur le terme "non-lexical lifetimes" (NLL). Honnêtement, d'après la documentation officielle, je ne comprends pas bien en quoi elles diffèrent des durées de vie "lexicales" habituelles. J'ai l'habitude que la durée de vie d'une variable soit définie par sa portée — un bloc entre accolades `{}`. Par exemple : ```rust fn main() { let r; // ---------+-- 'a { // | let x = 5; // -+-- 'b | r = &x; // | | } // -+ | println!("{}", r); // | } // ---------+ ``` Ici, tout est logique : `r` fait référence à `x`, mais `x` ne vit qu'à l'intérieur du bloc, donc le compilateur râle. C'est une durée de vie lexicale. Mais alors qu'est-ce que...