Avatar ·

Qual é a diferença entre usize e u32 em Rust? Quando usar cada um?

Olá a todos! Comecei a estudar Rust há algumas semanas e me deparei com uma questão confusa. No livro The Rust Programming Language, vejo frequentemente o uso do tipo `usize` para índices e comprimentos, mas também encontro `u32`. Não consigo entender qual é a diferença fundamental entre eles. Por exemplo, escrevi um programa simples que percorre os elementos de um vetor: ```rust fn main() { let v = vec![10, 20, 30, 40, 50]; // Opção 1: usando u32 for i in 0..v.len() as u32 { println!("{}", v[i as usize]); } // Opção 2: usando usize for i in 0..v.len() { println!("{}", v[i]); } } ``` A primeira opção funciona, mas preciso fazer várias conversões de tipo: `as u32` e `as usize`. A segunda opção funciona sem conversões. Mas ouvi dizer que `u32` ocupa menos memória e pode ser mais eficiente. Isso é verdade? Além disso, notei que se escrevo `let x: usize = 42;` e tento somar com `u32`, o compilador reclama. Por que Rust é tão rigoroso?