Avatar ·

¿Qué son los tiempos de vida no léxicos (non-lexical lifetimes) en Rust?

¡Hola, colegas! Empecé a estudiar Rust recientemente y me topé con el concepto de tiempos de vida (lifetimes). Parece que entendí lo básico: el compilador verifica que las referencias no queden colgando, y para eso usa anotaciones como `'a`. Pero constantemente me encuentro con el término "non-lexical lifetimes" (NLL). Honestamente, de la documentación oficial no me queda del todo claro en qué se diferencian de los tiempos de vida "léxicos" normales. Estoy acostumbrado a que el tiempo de vida de una variable está definido por su ámbito de visibilidad — un bloque entre llaves `{}`. Por ejemplo: ```rust fn main() { let r; // ---------+-- 'a { // | let x = 5; // -+-- 'b | r = &x; // | | } // -+ | println!("{}", r); // | } // ---------+ ``` Aquí todo tiene sentido: `r` hace referencia a `x`, pero `x` solo vive dentro del bloque, por lo que el compilador se queja. Eso es un tiempo de vida léxico. Pero entonces, ¿qué...