Avatar ·

ما هو "المؤشر السمين" (fat pointer) في Rust وكيف يختلف عن المؤشر العادي؟

مرحبًا أيها الزملاء! بدأت تعلم Rust واصطدمت بمصطلح "fat pointer" (المؤشر السمين). في الكتب يُكتب أنه "مؤشر بمعلومات إضافية"، لكنني لا أستطيع فهم لماذا هو مطلوب وأين يُستخدم. أعرف أنه في Rust هناك مراجع عادية `&T` تشير ببساطة إلى البيانات. لكن، على سبيل المثال، الشرائح. كتبت هذا الكود: ```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]` ليس مجرد عنوان؟ أيضًا سمعت عن كائنات traits، مثل `Box`. يُقال إنها أيضًا fat pointers. لكن ما هو "سمنتها"؟ فـ `Box` العادي هو مجرد مؤشر إلى الكومة. وما المميز في `Box`؟ اشرحوا لي، من فضلكم.