반응형
Haskell의 "아무것도하지 않음"기능인 id가 많은 양의 메모리를 소비하는 이유는 무엇입니까?
Haskell에는 입력을 변경하지 않고 반환하는 항등 함수가 있습니다. 정의는 간단하다 :
id :: a -> a
id x = x
따라서 재미있게 출력해야합니다 8
.
f = id id id id id id id id id id id id id id id id id id id id id id id id id id id
main = print $ f 8
몇 초 (및 작업 관리자에 따라 약 2GB의 메모리) 후에 컴파일이 실패합니다 ghc: out of memory
. 마찬가지로 통역사는 말합니다 ghci: out of memory
.
때문에 id
아주 간단한 기능이며, 나는 그것이 런타임 또는 컴파일 타임에 메모리 부담이 될 것으로 기대하지 않을 것이다. 사용되는 모든 메모리는 무엇입니까?
우리의 유형을 알고 id
,
id :: a -> a
우리는이 전문 때 id id
의 왼쪽 의 사본 id
유형이 있습니다 :
id :: (a -> a) -> (a -> a)
그리고에서 가장 왼쪽 id
에 대해 다시 전문화하면 다음과 같은 이점 이 id id id
있습니다.
id :: ((a -> a) -> (a -> a)) -> ((a -> a) -> (a -> a))
각 참조 그래서 id
추가를, 가장 왼쪽의 유형 서명은 id
큰 배입니다.
컴파일하는 동안 유형이 삭제되므로 GHC의 메모리 만 차지합니다. 프로그램에서 메모리를 차지하지 않습니다.
반응형
'development' 카테고리의 다른 글
Ajax, 뒤로 버튼 및 DOM 업데이트 (0) | 2020.07.28 |
---|---|
.netrwhist 란 무엇입니까? (0) | 2020.07.28 |
Android Fragments : 숨기기 / 표시 또는 추가 / 제거 / 바꾸기를 언제 사용합니까? (0) | 2020.07.28 |
QUnit과 재스민? (0) | 2020.07.28 |
C 통역사가 있습니까? (0) | 2020.07.28 |