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.