Avatar ·

Explicación holística de Cell y tipos con conteo de referencias en Rust

Soy nuevo en Rust y estoy tratando de entender cómo funcionan Cell, RefCell, Rc y Arc. En la documentación oficial están descritos, pero me falta una visión general: cómo se relacionan estos tipos entre sí y cuándo usar cada uno. Aquí hay un ejemplo concreto que me confundió. Estoy tratando de crear un grafo donde los nodos puedan referirse entre sí. Tengo una estructura Node: ```rust struct Node { value: i32, children: Vec, } ``` Pero no puedo agregar referencias cíclicas porque la propiedad requiere que cada nodo tenga un único dueño. Intenté usar referencias con lifetimes: ```rust struct Node<'a> { value: i32, children: Vec<&'a Node<'a>>, } ``` Pero el compilador se queja de los lifetimes y no entiendo cómo solucionarlo. Luego leí sobre Rc, pero cuando quiero cambiar el valor de un nodo a través de Rc, el compilador dice que Rc no permite acceso mutable. Entonces encontré RefCell y Rc>, pero parece un parche. Por favor, explica.