Explicação holística de Cell e tipos com contagem de referências em Rust
Sou novo em Rust e estou tentando entender como funcionam Cell, RefCell, Rc e Arc. Na documentação oficial eles são descritos, mas me falta uma visão geral — como esses tipos se relacionam entre si e quando usar cada um.
Aqui está um exemplo concreto que me confundiu. Estou tentando criar um grafo onde os nós podem referenciar uns aos outros. Tenho uma struct Node:
```rust
struct Node {
value: i32,
children: Vec,
}
```
Mas não consigo adicionar referências cíclicas, porque a ownership exige que cada nó tenha um único dono. Tentei usar referências com lifetimes:
```rust
struct Node<'a> {
value: i32,
children: Vec<&'a Node<'a>>,
}
```
Mas o compilador reclama dos lifetimes e não entendo como corrigir isso. Depois li sobre Rc, mas quando quero alterar o valor de um nó através de Rc, o compilador diz que Rc não permite acesso mutável. Então encontrei RefCell e Rc>, mas isso parece uma gambiarra.
Por favor, explique.