Avatar ·

ما الفرق بين usize و u32 في Rust؟ ومتى نستخدم كلًا منهما؟

مرحبًا بالجميع! بدأت تعلم Rust منذ بضعة أسابيع وواجهت نقطة غير واضحة. في كتاب The Rust Programming Language، أرى كثيرًا استخدام نوع `usize` للفهارس والأطوال، لكني أيضًا أجد `u32`. لا أستطيع فهم الفرق الجوهري بينهما. على سبيل المثال، كتبت برنامجًا بسيطًا يتكرر على عناصر متجه: ```rust fn main() { let v = vec![10, 20, 30, 40, 50]; // الخيار 1: استخدام u32 for i in 0..v.len() as u32 { println!("{}", v[i as usize]); } // الخيار 2: استخدام usize for i in 0..v.len() { println!("{}", v[i]); } } ``` الخيار الأول يعمل، لكني مضطر لإجراء الكثير من تحويلات الأنواع: `as u32` و `as usize`. الخيار الثاني يعمل دون تحويلات. لكني سمعت أن `u32` يستهلك ذاكرة أقل وقد يكون أكثر كفاءة. هل هذا صحيح؟ كما لاحظت أنه إذا كتبت `let x: usize = 42;` وحاولت الجمع مع `u32`، يشتكي المترجم. لماذا Rust صارم بهذا الشكل؟