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.
Fairer Weise, wenn man Zeiger nicht versteht, wird man mit dem Verleih-Prüfer auch nicht klar kommen. Das wird dann auch nur maximal frustrierend sein. Für einen blutigen Anfänger, der sich noch mit Zeigern abmüht ist der gelegentliche Segfault sicher angenehmer, als bei jedem kleinen Fehler, der eventuell aufgrund glücklicher Umstände nicht mal zu Problemen geführt hätte, in Kompilierfehler zu rennen. Als Anfänger hätte ich die wichtige Arbeit des Verleih-Prüfers sicher noch nicht zu schätzen gewusst und wahrscheinlich eher als Gängelung wahrgenommen.
Das gesagt, ich liebe Rost und grade der maschinennahen Programmierung ist es das beste, was ihr seit Ewigkeiten passiert ist. Im
Das gute ist, das der Übersetzter dir hilft statt in C einfach Dinge wegzuoptimieren. Er erklärt warum was nicht erlaubt ist.
Was du prüfst ob der Zeiger null ist. Darf er nicht sein, weg damit. Viel Spaß mit dem Speicherfehler. 👋
Kleiner Trick aus der Industrie, einfach die Entkäfer Version ausliefern. Dann funktioniert sogar mein Code!
Bei uns wird ein Programm mit MS C Compiler 98 übersetzt, weil mit neueren Compiler das Programm nicht mehr läuft.
Denn es wird mit volatile Thread Synchronisierung betrieben. 🥴
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.