Haskell과 같은 순수한 언어에서는 모든 데이터를 변경할 수 없으며 기존 데이터 구조를 어떤 방식으로도 변경할 수 없습니다
사실 그것은 일반적으로 사실이 아닙니다. 순수 언어는 엄격하지 않은 (지연 한) 평가를 사용하므로 잠재적으로 모든 하위 표현식의 평가가 지연됩니다. 평가되지 않은 표현식은 일반적으로 "thunk"로 힙 할당됩니다. 필요할 때 발현은 평가되고 썽크이되는 돌연변이 된 결과 값으로.
가비지 수집기는 그렇지 않은 순도에 직면하여 어떤 전략과 기술을 사용합니까?
내가 생각할 수있는 유일한 것은 블랙홀 입니다. 하스켈 연구 논문에서 GC 측면에서 새로운 것을 본 것은 기억 나지 않습니다.
순전 한 상황이 아닌 불순한 언어의 GC에서 잘 작동하는 것은 무엇입니까?
GC 쓰기 장벽. 불순한 언어는 포인터를 힙에 더 많이 쓰는 경향이 있으므로 쓰기 장벽이 더 많이 최적화되는 경향이 있습니다.
mark-region과 같은 다른 GC 알고리즘은 순수한 언어보다 할당 속도가 훨씬 낮기 때문에 불순한 언어와 관련하여 훨씬 더 실용적입니다.
순수한 언어가 GC를 위해 만드는 다른 새로운 문제는 무엇입니까?
순수한 언어는 매우 드물기 때문에 순수한 프로그램이 메모리를 사용하는 방법에 대한 데이터가 훨씬 적으므로 순수한 언어의 GC를 작성할 때 더 나쁜 위치에서 시작합니다.