Trong một ngôn ngữ thuần túy như Haskell, tất cả dữ liệu là bất biến và không có cấu trúc dữ liệu hiện tại nào có thể thay đổi theo bất kỳ cách nào
Thật ra điều đó không đúng. Các ngôn ngữ thuần túy sử dụng đánh giá không nghiêm ngặt (lười biếng) vì vậy việc đánh giá tiềm năng tất cả các biểu hiện phụ được hoãn lại. Các biểu thức không được đánh giá thường được phân bổ thành một "thunk". Khi được yêu cầu, biểu thức được ước tính và thunk được biến đổi thành giá trị kết quả.
Những chiến lược và kỹ thuật nào để người thu gom rác sử dụng khi đối mặt với sự thuần khiết mà họ sẽ không làm?
Điều duy nhất tôi có thể nghĩ là lỗ đen . Tôi không nhớ là đã thấy bất cứ điều gì mới về phía GC trong các tài liệu nghiên cứu của Haskell.
Điều gì hoạt động rất tốt trong một ngôn ngữ không tinh khiết của GC không trong bối cảnh thuần túy?
Các rào cản viết GC. Các ngôn ngữ không tinh khiết có xu hướng viết các con trỏ vào heap nhiều hơn vì vậy chúng có xu hướng để các rào cản viết của chúng được tối ưu hóa mạnh mẽ hơn.
Các thuật toán GC khác như vùng đánh dấu khả thi hơn nhiều trong bối cảnh ngôn ngữ không tinh khiết vì chúng có thể có tỷ lệ phân bổ thấp hơn nhiều so với ngôn ngữ thuần túy.
Những vấn đề mới nào khác mà ngôn ngữ thuần túy tạo ra cho các GC?
Ngôn ngữ thuần túy rất hiếm vì vậy có rất ít dữ liệu về cách các chương trình thuần sử dụng bộ nhớ và do đó, bạn đang bắt đầu ở một vị trí tồi tệ hơn khi cố gắng viết một GC cho ngôn ngữ thuần túy.