In a pure language like Haskell, all data is immutable and no existing data structures can be changed in any way
In realtà non è generalmente vero. Le lingue pure usano una valutazione non severa (pigra), quindi la valutazione di potenzialmente tutte le sottoespressioni viene differita. Le espressioni non valutate sono generalmente heap assegnate come "thunk". Quando richiesto, l'espressione viene valutata e il thunk è mutato nel valore risultante.
What strategies and techniques do garbage collectors employ in the face of purity that they wouldn't otherwise?
L'unica cosa che posso pensare è buchi neri . Non ricordo di aver visto niente di nuovo sul lato GC nei documenti di ricerca di Haskell.
What works very well in an impure language's GC that doesn't in a pure context?
La barriera di scrittura GC. I linguaggi impuri tendono a scrivere molto più puntatori nell'heap in modo che tendano ad avere le barriere di scrittura più strongmente ottimizzate.
Altri algoritmi GC come mark-region sono molto più fattibili nel contesto delle lingue impure perché possono avere tassi di allocazione molto più bassi rispetto alle lingue pure.
What other new problems do pure languages create for GCs?
I linguaggi puri sono molto rari, quindi ci sono molti meno dati su come i programmi puri usano la memoria e, pertanto, stai iniziando una posizione peggiore quando provi a scrivere un GC per un linguaggio puro.