Avatar ·

¿Cuál es la diferencia entre usize y u32 en Rust? ¿Cuándo usar cada uno?

¡Hola a todos! Empecé a estudiar Rust hace un par de semanas y me encontré con un punto confuso. En el libro The Rust Programming Language veo a menudo el uso del tipo `usize` para índices y longitudes, pero también encuentro `u32`. No puedo entender cuál es la diferencia fundamental entre ellos. Por ejemplo, escribí un programa simple que itera sobre los elementos de un vector: ```rust fn main() { let v = vec![10, 20, 30, 40, 50]; // Opción 1: uso u32 for i in 0..v.len() as u32 { println!("{}", v[i as usize]); } // Opción 2: uso usize for i in 0..v.len() { println!("{}", v[i]); } } ``` La primera opción funciona, pero tengo que hacer un montón de conversiones de tipo: `as u32` y `as usize`. La segunda opción funciona sin conversiones. Pero he oído que `u32` ocupa menos memoria y puede ser más eficiente. ¿Es esto cierto? También noté que si escribo `let x: usize = 42;` e intento sumarlo con un `u32`, el compilador se queja. ¿Por qué Rust es tan estricto?