In einer reinen Sprache wie Haskell sind alle Daten unveränderlich und vorhandene Datenstrukturen können in keiner Weise geändert werden
Eigentlich stimmt das nicht generell. Reine Sprachen verwenden eine nicht strenge (faule) Auswertung, sodass die Auswertung potenziell aller Unterausdrücke zurückgestellt wird. Nicht bewertete Ausdrücke werden im Allgemeinen als "Thunk" bezeichnet. Bei Bedarf wird der Ausdruck ausgewertet und der Thunk zum resultierenden Wert mutiert .
Welche Strategien und Techniken setzen Müllsammler angesichts der Reinheit ein, die sie sonst nicht anwenden würden?
Das einzige, woran ich denken kann, sind Schwarze Löcher . Ich kann mich nicht erinnern, in den Forschungsberichten von Haskell etwas Neues auf der GC-Seite gesehen zu haben.
Was funktioniert sehr gut in der GC einer unreinen Sprache, die sich nicht in einem reinen Kontext befindet?
Die GC-Schreibsperre. Unreine Sprachen neigen dazu, viel mehr Zeiger in den Haufen zu schreiben, sodass ihre Schreibbarrieren tendenziell stärker optimiert werden.
Andere GC-Algorithmen wie Mark-Region sind im Kontext von unreinen Sprachen viel praktikabler, da sie viel niedrigere Zuweisungsraten als reine Sprachen haben können.
Welche anderen neuen Probleme bereiten reine Sprachen für GCs?
Reine Sprachen sind sehr selten, daher gibt es viel weniger Daten darüber, wie reine Programme den Speicher nutzen, und Sie befinden sich in einer schlechten Ausgangslage, wenn Sie versuchen, einen GC für eine reine Sprache zu schreiben.