Gestión del tiempo de vida del garbage collector en Rust: cómo implementar recolección de basura para objetos de larga duración
¡Hola, colegas! Soy nuevo en Rust y estoy tratando de entender la gestión de memoria. Vengo de Java, donde el garbage collector resuelve todos los problemas de memoria, y ahora me cuesta acostumbrarme al sistema de ownership y lifetimes.
Necesito implementar una estructura de datos donde los objetos puedan vivir mucho tiempo y referenciarse entre sí. Por ejemplo, un grafo con referencias cíclicas. En Java simplemente crearía un `HashMap>` y lo olvidaría. En Rust, el compilador se queja de los borrows y lifetimes.
Estoy intentando hacer algo como:
```rust
struct Node {
id: u32,
children: Vec<&Node>,
}
fn main() {
let mut nodes = Vec::new();
let node1 = Node { id: 1, children: vec![] };
let node2 = Node { id: 2, children: vec![] };
node1.children.push(&node2);
node2.children.push(&node1);
}
```
El compilador da errores sobre lifetimes y borrows. Entiendo que es por las reglas de ownership, pero ¿cómo implemento garbage collection para estos casos? ¿Necesito usar `Rc` y `Re