"fat pointer" (मोटा पॉइंटर) Rust में क्या है और इसकी आवश्यकता क्यों है?
नमस्ते साथियों! मैंने हाल ही में Rust सीखना शुरू किया है और "fat pointer" (मोटा पॉइंटर) शब्द से सामना हुआ। आधिकारिक दस्तावेज़ीकरण और फ़ोरम में यह शब्द मिलता है, लेकिन परिभाषाएँ अस्पष्ट हैं।
मैं समझता हूँ कि Rust में सामान्य पॉइंटर होते हैं (जैसे `*const T` या रेफरेंस `&T`), जो केवल मेमोरी में एक पता संग्रहीत करते हैं। लेकिन "मोटा" पॉइंटर क्या है? यह सामान्य से कैसे अलग है? मैंने सुना है कि यह ट्रेट्स (`dyn Trait`) और स्लाइस (`&[u8]`) से संबंधित है।
उदाहरण के लिए, जब मैं लिखता हूँ:
```rust
let slice: &[i32] = &[1, 2, 3];
```
मुझे पता है कि `slice` एक array का रेफरेंस है। लेकिन कहा जाता है कि यह fat pointer है। क्यों? आखिर यह तो सिर्फ एक रेफरेंस है, है ना? या जब मैं trait object का उपयोग करता हूँ:
```rust
fn print_debug(item: &dyn Debug) {
println!("{:?}", item);
}
```
यहाँ `item` भी एक fat pointer है? यह कितनी मेमोरी लेता है? और Rust कैसे जानता है कि कौन सा मेथड कॉल करना है, जबकि टाइप केवल रनटाइम पर ज्ञात होता है?
कृपया सरल शब्दों में, उदाहरणों के साथ समझाएँ। मुझे लगता है कि मैंने इस बारे में कुछ महत्वपूर्ण छोड़ दिया है।