Rust में जीवनकाल (lifetimes) को स्पष्ट रूप से क्यों निर्दिष्ट करना पड़ता है और यह कैसे काम करता है?
मैंने अभी Rust सीखना शुरू किया है और जीवनकाल (lifetimes) की अवधारणा का सामना किया है। ईमानदारी से कहूं तो, मुझे समझ नहीं आता कि इन्हें स्पष्ट रूप से क्यों निर्दिष्ट करना पड़ता है। अन्य भाषाओं में, जैसे C++ या Java में, references और pointers बिना किसी अतिरिक्त annotations के काम करते हैं। Rust मुझे `<'a>` और `&'a mut T` क्यों लिखने के लिए मजबूर करता है?
यहाँ एक उदाहरण है जो मुझे भ्रमित करता है। मैं एक फंक्शन लिखना चाहता हूँ जो इंडेक्स के अनुसार array के एक element का reference लौटाता है:
```rust
fn get_element(arr: &[i32], index: usize) -> &i32 {
&arr[index]
}
```
कंपाइलर कहता है: "missing lifetime specifier"। वह खुद अनुमान क्यों नहीं लगा सकता? मैं array का reference दे रहा हूँ और उसके element का reference लौटा रहा हूँ। स्पष्ट है कि लौटाए गए reference का जीवनकाल इनपुट array के जीवनकाल के समान होना चाहिए।
या फिर यह दूसरा उदाहरण। मैं एक struct में string का reference स्टोर करना चाहता हूँ:
```rust
struct Person {
name: &str,
}
```
फिर से त्रुटि: "missing lifetime specifier"। Rust struct में reference को स्वचालित रूप से क्यों नहीं निकाल सकता कि उसे कितने समय तक जीवित रहना चाहिए?