Rust में "फैट पॉइंटर" (fat pointer) क्या है और यह सामान्य पॉइंटर से कैसे अलग है?
नमस्ते साथियों! मैंने Rust सीखना शुरू किया है और "fat pointer" शब्द पर ठोकर खाई। किताबों में लिखा है कि यह "अतिरिक्त मेटाइन्फ़ॉर्मेशन वाला पॉइंटर" है, लेकिन मुझे समझ नहीं आ रहा कि इसकी आवश्यकता क्यों है और इसका उपयोग कहाँ होता है।
मैं जानता हूँ कि Rust में सामान्य रेफरेंस `&T` होते हैं, जो केवल डेटा की ओर इशारा करते हैं। लेकिन, उदाहरण के लिए, slices। मैंने यह कोड लिखा:
```rust
fn main() {
let arr = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr[1..4];
println!("स्लाइस की लंबाई: {}", slice.len()); // 3 प्रिंट करेगा
}
```
मुझे समझ नहीं आता: Rust को कैसे पता चलता है कि स्लाइस की लंबाई 3 है, जब मैं केवल पहले एलिमेंट का रेफरेंस पास कर रहा हूँ? C/C++ में सामान्य पॉइंटर केवल एड्रेस स्टोर करता है, और लंबाई अलग से पास करनी होती है। तो क्या `&[i32]` सिर्फ एक एड्रेस नहीं है?
इसके अलावा, मैंने trait objects के बारे में सुना है, जैसे `Box`। कहा जाता है कि ये भी fat pointers हैं। लेकिन इनकी "मोटापा" क्या है? आखिरकार, सामान्य `Box` सिर्फ हीप की ओर इशारा करने वाला एक पॉइंटर है। तो `Box` में ऐसा क्या खास है?
कृपया समझाएँ।