¿Qué se usa en Rust en lugar del recolector de basura para gestionar la memoria?
¡Hola! Acabo de empezar a aprender Rust después de Java y Python, y tengo una confusión. En Java y Python hay un recolector de basura (GC) que libera memoria automáticamente cuando los objetos ya no son necesarios. Pero he leído que Rust no tiene GC. ¿Cómo gestiona Rust la memoria sin un recolector de basura? ¿Tendré que llamar manualmente a `free()` o `delete`, como en C? ¡Eso es incómodo y propenso a fugas!
Aquí hay un ejemplo simple que escribí, tratando de entender qué pasaría:
```rust
fn main() {
let s1 = String::from("Привет");
let s2 = s1; // Esperaba una copia, como en Java
println!("{}", s1); // ¡Esto no compila! Error: borrow of moved value
}
```
No entiendo por qué `s1` ya no está disponible después de la asignación a `s2`. En Java, `s2` simplemente apuntaría al mismo string, y `s1` seguiría siendo válido. ¿Qué es "move" y cómo se relaciona con la ausencia de GC? ¿Y cómo garantiza Rust la seguridad de la memoria sin un recolector de basura? Por favor, explícalo para un principiante.
También he oído sobre "ownership" (propiedad)...