Unter Persistence versteht man ein Konzept, bei dem Änderungen an einer
komplexen Datenstruktur nicht unwiederbringliche Äbänderung dieser
bedeutet. Es werden lediglich die Elemente, die sich im Vergleich zum alten
Zustand geändert haben neu erzeugt. Es werden allerdings alle unveränderten
Elemten in die neue Struktur mit eingebaut.
Beim Einfügen des Elementes 7 in den Baum links werden lediglich die Elemente,
die sich rechts neben dem Baum befinden neu erzeugt, wobei die 1 zusätzlich
eine Referenz auf die 2 und die 4 eine auf die 8 hat. Damit kann man über
die linke 1 auf den alten Baum zugreifen und über die rechte 1 auf den
neuen Baum.
1 1 |
Durch dieses Verfahren behält man die Möglichkeit, trotz Änderungen
immer wieder auf eine alte Version des Baumes zugreifen zu können. Dadurch
werden Undo- oder Rollback-Funktionalitäten extrem einfach. Ausserdem spart
man hierbei im Gegensatz zu einer kompletten Kopie des Baumes Speicherplatz.
Zu guter Letzt spart man aber auch Laufzeit, da nur die Teile neu erzeugt werden
müssen, die sich auch wirklich geändert haben.
Wenn man dieses Verfahren in implizite Sprachen umsetzt, sollte man sich darüber
im Klaren sein, dass ein willkürliche Wertänderung eines der Elemente
des Baumes (ohne Erzeugung eines neuen persistenten Baumes) Auswirkungen auf
andere Versionen des Baumes haben kann (Seiteneffekte). Unter Haskell kann dies
jedoch nicht passieren, da nachträgliche Wertänderungen nicht möglich
sind.