Avatar ·

Ganzheitliche Erklärung von Cell und Referenzzählungstypen in Rust

Ich bin neu in Rust und versuche zu verstehen, wie Cell, RefCell, Rc und Arc funktionieren. In der offiziellen Dokumentation sind sie beschrieben, aber mir fehlt das Gesamtbild – wie diese Typen zueinander in Beziehung stehen und wann man welchen verwendet. Hier ist ein konkretes Beispiel, das mich verwirrt hat. Ich versuche, einen Graphen zu erstellen, in dem Knoten aufeinander verweisen können. Ich habe eine Node-Struktur: ```rust struct Node { value: i32, children: Vec, } ``` Aber ich kann keine zyklischen Referenzen hinzufügen, weil Ownership erfordert, dass jeder Knoten einen einzigen Besitzer hat. Ich habe versucht, Referenzen mit Lifetimes zu verwenden: ```rust struct Node<'a> { value: i32, children: Vec<&'a Node<'a>>, } ``` Aber der Compiler beschwert sich über die Lifetimes und ich verstehe nicht, wie ich das beheben kann. Dann habe ich über Rc gelesen, aber wenn ich den Wert eines Knotens über Rc ändern möchte, sagt der Compiler, dass Rc keinen mutablen Zugriff erlaubt. Dann habe ich RefCell und Rc> gefunden, aber das wirkt wie ein Workaround. Bitte erkläre.