답변:
함수형 프로그래밍 언어는 훨씬 더 컴파일 시간을 최적화합니다. 그 이유 중 하나는 순도입니다. 상태가 없기 때문에 동시성은 사소합니다. 따라서 컴파일러는 프로그램의 동작을 변경하지 않고 두 개의 브랜치를 가져 와서 쉽게 동시화 할 수 있습니다.
동시에, 상태없이 계산할 수있는 것 (즉, haskell에서 비 모나 딕 한 것)은 컴파일러에 의해 미리 계산 될 수 있지만, 그러한 계산은 비용이 많이들 수 있으며 아마도 부분적으로 만 수행 될 수 있습니다.
또한 계산에 필요하지 않은 것은 프로그램에서 완전히 최적화 할 수 있습니다.
원칙적으로 함수형 언어에 비해 컴파일 타임 최적화 가능성이 더 중요하다는 것은 아마도 사실 일 것입니다.
더 흥미로운 점은 이들이 현재 컴파일러에서 실제로 구현되고 이러한 최적화가 실제로 얼마나 관련성이 있는지 (예 : 예측 가능한 컴파일러 설정이있는 프로덕션 환경에서 관용적 인 '실제 (TM)'코드의 최종 성능)입니다.
예를 들어 악명 높은 Computer Language Benchmarks Game에 대한 Haskell의 제출 (그것이 나쁘지만-현재-거기에 훨씬 더 나은 것이 없습니다)은 상당한 시간이 소비되었다는 인상을줍니다. "최적화 가능한 컴파일러 최적화"에 대한 주장에 직면 한 수동 최적화 insert some property about FP languages here
는 최적화가 관련 현실보다 이론적으로 가능한 것 이상으로 보인다.
나는이 시점에서 잘못 입증 된 것이 기쁘다.
기능적 스타일에서 프로그램을 통한 값의 흐름은 컴파일러와 프로그래머 모두에게 매우 가시적입니다. 따라서 컴파일러는 값을 저장할 위치, 보존 기간 등을 결정할 수 있습니다.
명령형 언어에서 컴파일러는 프로그래머에게 대부분의 변수가 정의 된 수명 동안 유지되는 메모리의 실제 위치에 해당하는 모델을 약속합니다. 잠재적으로 모든 명령문은 이러한 위치 중 하나에서 읽거나 쓸 수 있으므로 컴파일러는 메모리 위치를 레지스터 할당으로 바꾸거나 두 변수를 단일 저장 위치로 병합하거나 위치에 대한 어려운 분석을 수행 한 후 유사한 최적화를 수행 할 수 있습니다. 그렇지 않으면 프로그램에서 해당 변수를 참조 할 수 있습니다.
이제 두 가지 경고가 있습니다.
그러나 일반적인 질문에 대답하기 위해, 기능적 패러다임은 컴파일러에게 명령형 설정이없는 것을 최적화 할 수있는 많은 자유를 부여합니다.
main
, 상태 자체를 사용하는 것이 아니라 상태 변환 기능이라는 것입니다.