Avatar ·

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