Avatar ·

Comprendre Box, ref, & et * en Rust : quelle est la différence et comment les utiliser ?

Bonjour à tous ! J'ai récemment commencé à apprendre Rust et je confonds constamment ces quatre choses : `Box`, `ref`, `&` et `*`. Je comprends qu'elles sont toutes liées aux pointeurs et aux références, mais je n'arrive pas à saisir quand utiliser quoi. Par exemple, j'écris ce programme : ```rust fn main() { let x = 42; let y = &x; // référence let z = Box::new(x); // Box println!("{} {}", y, z); } ``` Tout fonctionne. Mais quand j'essaie de faire quelque chose de plus complexe, comme du pattern matching, tout se casse : ```rust fn main() { let maybe_number = Some(10); match maybe_number { Some(ref x) => println!("Obtenu {}", x), None => println!("Rien du tout"), } } ``` Pourquoi a-t-on besoin de `ref` ici, et pas simplement de `x` ? Et en quoi `*` diffère-t-il de `&` ? J'ai lu que `*` est la déréférence, mais pourquoi en a-t-on besoin si on peut simplement utiliser `&` ? Expliquez-moi, s'il vous plaît, de manière simple, comment ces quatre entités sont liées et quand les utiliser. Je suis particulièrement intéressé par la pratique.