Par quoi Rust remplace le ramasse-miettes ? Alternatives au GC en Rust
Bonjour, collègues ! Je passe à Rust après plusieurs années de travail avec Java et Python, et une question fondamentale me taraude. En Java, j'ai l'habitude que le garbage collector (GC) libère automatiquement la mémoire lorsque les objets deviennent inaccessibles. En Python — c'est similaire, avec le comptage de références et le GC pour les références cycliques. Mais Rust est fondamentalement différent : il n'y a pas de garbage collector, et pourtant le langage est considéré comme sûr.
J'ai écrit un exemple simple qui fonctionnerait sans problème en Java ou Python, mais qui soulève des questions en Rust :
```rust
struct User {
name: String,
posts: Vec,
}
fn main() {
let user = User {
name: "Alice".to_string(),
posts: vec!["Hello".to_string()],
};
// Comment Rust sait-il quand libérer la mémoire pour user ?
// Que se passe-t-il si je passe user à une fonction ?
process(user);
// Et ici — tentative d'utiliser user après le move !
// println!("{}", user.name); // Erreur de compilation !
}
fn process(u: User) {
println!("P