Rust में lifetimes को स्पष्ट रूप से क्यों निर्दिष्ट करना पड़ता है, और वे कैसे काम करते हैं?
मैं Rust में नया हूँ और lifetimes की अवधारणा को समझने की कोशिश कर रहा हूँ। मैंने एक सरल function लिखा जो array के element का reference लौटाता है:
```rust
fn get_first_element(arr: &[i32]) -> &i32 {
&arr[0]
}
```
Compiler ने इसे बिना किसी समस्या के compile कर दिया। लेकिन जब मैंने एक function लिखने की कोशिश की जो दो references लेता है और उनमें से एक लौटाता है:
```rust
fn longest(x: &str, y: &str) -> &str {
if x.len() > y.len() { x } else { y }
}
```
तो मुझे error मिला: "missing lifetime specifier"। पहले मामले में compiler ने खुद ही समझ लिया, लेकिन दूसरे में explicit lifetime क्यों चाहिए? मैंने सोचा था कि Rust smart है और सब कुछ automatically infer कर सकता है।
मैं समझता हूँ कि lifetimes dangling references को रोकने के लिए ज़रूरी हैं, लेकिन मुझे यह logic समझ नहीं आता कि कुछ मामलों में वे infer हो जाते हैं और कुछ में नहीं। कृपया examples के साथ समझाएँ कि कब lifetime को explicitly specify करना पड़ता है और कब बिना काम चल सकता है। खासकर, मुझे यह जानने में दिलचस्पी है कि एक parameter वाले simple functions में ऐसा क्यों होता है।