Rust में नॉन-लेक्सिकल लाइफटाइम्स (non-lexical lifetimes) क्या हैं?
नमस्ते साथियों! मैंने हाल ही में Rust सीखना शुरू किया है और लाइफटाइम्स (lifetimes) की अवधारणा से सामना हुआ। मैंने मूल बातें समझ ली हैं: कंपाइलर जाँचता है कि references हैंग न हों, और इसके लिए `'a` जैसे annotations का उपयोग करता है।
लेकिन मैं लगातार "non-lexical lifetimes" (NLL) शब्द पर ठोकर खाता हूँ। सच कहूँ तो, आधिकारिक दस्तावेज़ से मुझे पूरी तरह स्पष्ट नहीं हुआ कि ये सामान्य, "lexical" lifetimes से कैसे भिन्न हैं। मैं इस आदत में हूँ कि एक variable का lifetime उसके scope से निर्धारित होता है — curly braces `{}` वाले block से। उदाहरण के लिए:
```rust
fn main() {
let r; // ---------+-- 'a
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
println!("{}", r); // |
} // ---------+
```
यहाँ सब तार्किक है: `r`, `x` को reference करता है, लेकिन `x` केवल block के अंदर जीवित है, इसलिए कंपाइलर त्रुटि देता है। यह lexical lifetime है।
लेकिन फिर "non-lexical" क्या है?