Qu'est-ce que Rust utilise à la place du garbage collector pour la gestion de la mémoire ?
Bonjour ! Je viens de commencer à apprendre Rust après Java et Python, et j'ai un problème de compréhension. En Java et Python, il y a un garbage collector (GC) qui libère automatiquement la mémoire quand les objets ne sont plus nécessaires. Mais j'ai lu que Rust n'a pas de GC. Comment Rust gère-t-il alors la mémoire sans garbage collector ? Vais-je devoir appeler manuellement `free()` ou `delete`, comme en C ? C'est peu pratique et sujet aux fuites !
Voici un exemple simple que j'ai écrit, en essayant de comprendre ce qui va se passer :
```rust
fn main() {
let s1 = String::from("Привет");
let s2 = s1; // Je m'attendais à une copie, comme en Java
println!("{}", s1); // Cela ne compile pas ! Erreur : borrow of moved value
}
```
Je ne comprends pas pourquoi `s1` n'est plus accessible après l'affectation à `s2`. En Java, `s2` pointerait simplement vers la même chaîne, et `s1` resterait valide. Qu'est-ce qu'un "move" et comment cela est-il lié à l'absence de GC ? Et comment Rust garantit-il la sécurité de la mémoire sans garbage collector ? Expliquez-moi, s'il vous plaît, pour un débutant.
J'ai aussi entendu parler de "propri