Gerenciamento do tempo de vida do garbage collector em Rust: como implementar coleta de lixo para objetos de longa duração
Olá, colegas! Sou novo em Rust e estou tentando entender o gerenciamento de memória. Venho do Java, onde o garbage collector resolve todos os problemas de memória, e agora tenho dificuldade em me acostumar com o sistema de ownership e lifetimes.
Preciso implementar uma estrutura de dados onde objetos podem viver por muito tempo e referenciar uns aos outros. Por exemplo, um grafo com referências cíclicas. Em Java, eu simplesmente criaria um `HashMap>` e esqueceria. Em Rust, o compilador reclama de borrows e lifetimes.
Estou tentando fazer 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);
}
```
O compilador dá erros sobre lifetimes e borrows. Eu entendo que isso é por causa das regras de ownership, mas como implementar coleta de lixo para esses casos? Preciso usar `Rc` e `RefCell`? Ou existe outra