ما الفرق بين 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 صارم بهذا الشكل؟