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?