Mike Evans hat geschrieben:Another way to think of an Immutable collection is to think of it as the state of its data at the specific point in time that the collection was created. Whenever we query that collection, we always get the state of its data that existed at its moment of creation. We might move on in time, but the collection itself never does.
MfG Socke Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Vor allem geht es mir, um das schnelle Kopieren (korrekter würde man es persistent copy-on-write statt immutable nennen)
Kopieren kennt man ja von records und statischen Arrays, wenn man eine Funktion aufruft die keinen var/const Parameter für den record/array hat wird der Parameter für die Funktion kopiert. Wenn dann die Funktion etwas am Wert ändern, hat die aufrufende Funktion trotzdem noch den alten Wert. Da das Kopieren die Voreinstellung ist statt das var/const-Verhalten, wird es wohl schon einen Nutzen bringen
Nur ist das Kopieren von records langsam, während es mit den HAMT schnell geht
Wenn man zum Beispiel dieselbe Hashmap an mehrere Threads übergibt, will man ja nicht, dass die sich gegenseitig überschreiben, wenn sie etwas ändern, aber die gesamte Map normal zu kopieren wäre auch zu langsam
BeniBela hat geschrieben:Wenn man zum Beispiel dieselbe Hashmap an mehrere Threads übergibt, will man ja nicht, dass die sich gegenseitig überschreiben, wenn sie etwas ändern, aber die gesamte Map normal zu kopieren wäre auch zu langsam
Und deine Map kann schneller kopiert werden, da due eine Baumstruktur (Trie) verwendest? Oder muss bei einer "Kopie/Änderung" nicht die Originalliste kopiert werden, da diese sowieso nicht verändert werden darf und einfach als Vorgängerliste verwendet wird?
MfG Socke Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Beides, das meiste wird nicht kopiert und als Vorgänger"liste" verwendet, aber wenn doch mal was kopiert wird, kann man es im Baum effizienter machen. Zum Beispiel wenn man einen Knoten kopiert, um ihn zu überschreiben, kann man die Kinder unverändert lassen.
So im Idealfall wird nur die Wurzel kopiert, wenn man beispielsweise nur ein neues Kind an die Wurzel hängt.
Im schlimmsten Fall werden 7 Knoten kopiert (und ein Array wenn es mehrere Einträge mit demselben Hashwert gibt), weil das die Baumtiefe ist