Avatar ·

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.