Diese Dinger verursachen am laufenden Band Probleme. Ich habe ja durchaus Spaß daran, wann man auch mal wirklich den eigenen Kopf benutzen muss beim Programmieren, aber Zeiger sind schon eine gewisse Herausforderung.
Edit: Es lag nicht an den Zeigern, sondern daran, dass ich ein paar kleine Fehler in meinem Code hatte, die ich übersehen habe.
Ich weiss heute noch nicht, wie man eine bidirektionale verkettete Liste baut (in sicherem Rost meine ich nicht möglich) oder Referenzen von anderen Objekten in einem Strukt korrekt Lebenszeit annotiert.
Geht halt mit Pointern. Hab ich schon gemacht. Wo es wirklich spannend wird sind intrinsische verkettete listen (also die Listen Heads sind Teil vom struct, nicht das struct selbst).
Problem ist, dass du immer garantieren musst, dass sich die Addresse der Listenobjekte nicht ändert. Dafür gibt’s Pin, Box, und Versprechen auf Ehre.
Für die bidirektionale Liste muss man, soweit ich weiß, mit Rc auf der einen Seite und rc::Weak auf der anderen Seite arbeiten.
Fairerweise muss ich aber sagen, dass ich es noch nie ausprobiert habe. Sowas braucht man ja doch eher selten, und wenn man es braucht, will man oftmals einfach VecDeque.
Vergiss nicht da noch ein RefCell rein zu packen weil DerefMut nicht für Rc implementiert ist.