Avatar ·

Quelle est la différence entre usize et u32 en Rust ? Quand utiliser quoi ?

Bonjour à tous ! J'ai commencé à apprendre Rust il y a quelques semaines et je suis tombé sur un point flou. Dans le livre The Rust Programming Language, je vois souvent l'utilisation du type `usize` pour les indices et les longueurs, mais je rencontre aussi `u32`. Je n'arrive pas à comprendre la différence fondamentale entre eux. Par exemple, j'ai écrit un programme simple qui parcourt les éléments d'un vecteur : ```rust fn main() { let v = vec![10, 20, 30, 40, 50]; // Variante 1 : j'utilise u32 for i in 0..v.len() as u32 { println!("{}", v[i as usize]); } // Variante 2 : j'utilise usize for i in 0..v.len() { println!("{}", v[i]); } } ``` La première variante fonctionne, mais je dois faire beaucoup de conversions de type : `as u32` et `as usize`. La deuxième variante fonctionne sans conversions. Mais j'ai entendu dire que `u32` prend moins de mémoire et pourrait être plus efficace. Est-ce vrai ? J'ai aussi remarqué que si j'écris `let x: usize = 42;` et que j'essaie de l'additionner avec un `u32`, le compilateur râle. Pourquoi Rust est-il si strict ?