Чистою мовою, як Haskell, всі дані незмінні і жодна структура даних не може бути змінена жодним чином
Насправді це взагалі не так. Чисті мови використовують не суворе (ледаче) оцінювання, тому оцінка потенційно всіх підекспресій відкладається. Неоцінені вирази, як правило, купі виділяються як "шматок". За потреби вираження оцінюється, а грона мутується на отримане значення.
Які стратегії та прийоми використовують сміттєзбірники в умовах чистоти, яку б інакше не було?
Єдине, про що я можу придумати - це чорні діри . Я не пригадую, щоб у дослідницьких роботах Haskell бачив щось інше з боку GC.
Що дуже добре працює в GC нечистої мови, що не в чистому контексті?
Бар'єр запису GC. Нечисті мови, як правило, записують покажчики в купу набагато більше, тому вони, як правило, значно сильніше оптимізують свої бар'єри для запису.
Інші алгоритми GC, такі як маркова область, набагато більш життєздатні в контексті нечистих мов, оскільки вони можуть мати набагато менші показники розподілу, ніж чисті мови.
Які ще нові проблеми створюють чисті мови для GC?
Чисті мови дуже рідкісні, тому набагато менше даних про те, як чисті програми використовують пам'ять, і, отже, ви починаєте в гіршому становищі, намагаючись написати GC для чистої мови.