5

기능 언어 코드의 필수적 같은 해석을 사용 하는가 :런타임은 일반적으로 내가 함수형 언어의 통역에 대한 일반적인 질문이

실제로 런타임에 필수 언어에 비해 기능적인 언어를 사용하여 어떤 장점이 있습니까를 (또는 통역사에게가는 길)? (예 : this 등) 내가 본 질문의

없음 정말이 질문에 얻을 수없고, 검색은 다른 언어의 정의를 통해 인수 범람하고 있습니다.

편집 : 답변을 필요로하는 유일한 질문으로 끝장났습니다.

+2

통역사에게 도움이되는 이점은 무엇을 의미합니까? – sepp2k

+1

@ sepp2k 나열된 특정 예제와 마찬가지로 : 함수 프로그래밍 언어의 다양한 공통된 기능이있는 것 같습니다. 함수형 프로그래밍을 명령형과 차별화하는 것으로 보이는 이러한 기능이 실제로 런타임에서 어떤 차이를 만들지, 아니면 두 가지를 구별하는 코딩 스타일에서 단지 피상적 인 차이인지를 알고 싶습니다. 이해가 되니? –

+0

제목과 제목이 약간 바뀌 었으니 이제는 더 명확 해지기를 바랍니다. –

답변

29

짧은 대답입니다 : 모든 말 (조립 또는 가상 기계 언어)의 일부 낮은 수준의 언어로 컴파일됩니다. 기능적 및 명령형 언어는 동등한 기반 위에 있습니다. 기계에서 사용할 수있는 것을 수용하기 위해 추상화 메커니즘을 컴파일해야합니다.
언어가 차이를 만드는 이유는 (원하는 경우 손으로 코드를 최적화하기위한 저수준 기능을 제공하여) 기본 저수준 코드와 얼마나 밀접한 관련이 있는지, 그리고 강력한 추론을 제공하는 깨끗한 의미를 사용하면 어느 것이 최적화되었는지 쉽게 결정할 수 있습니다 .

예를 들어, 원시 코드로 컴파일 할 때 루프는 루프와 마찬가지로 (일반적으로) 루프로 컴파일되지 않지만 루프와 마찬가지로 루프로 컴파일됩니다. 대부분의 어셈블리 언어에는 루프 나 재귀가 없습니다. 물론 루프가 있지만 점프가없는 가상 시스템으로 컴파일하는 경우 루프를 생성해야합니다. 일반적인 꼬리 호출은 루프보다 표현력이 풍부하고 그 한계를 극복하고 효율성을 포기해야하므로 Java 가상 머신에서의 문제 예입니다. 기능 프로그램의

은 "장점"는 의미가 더 잘 행동하기 때문에,이 프로그램에 대해보다 쉽게 ​​추론, 예를 들면 간단한 방법으로 최적화를 표현할 수 있다고 할 수있다. 오늘날 대부분의 컴파일러는 중간 수준 인 Single Static Assignment (SSA)을 사용합니다.이 형식은 기본적으로 저수준 함수 언어입니다 .¹ - 컴파일러 커뮤니티에서 독자적으로 발견되었지만. 대부분의 최적화는 예를 들어 변수 변이를 제거한 경우 더 쉽게 수행 할 수 있으며 변수는 모든 범위에서 동일한 값을 유지합니다. 그러한 기능적인 중간 양식에 대한 레지스터 할당을 수행하는 몇 가지 기법이 있습니다.

¹ : 앤드류 아펠의 짧은 1998 문서를 참조하십시오 SSA is Functional Programming을; SSA 양식에 대한 세부 사항에 관심이있는 경우 CPS과 같이 SSA와 기타 기능적 중간 양식 간의 관계에 대한 내용은 some reading notes입니다.

순도 (부작용이 없거나 부작용이없는 우수한 제어 기능) 및 정적 입력으로부터 최적화 이점을 얻을 수도 있습니다. 순도에서 당신은 deforestation 또는 fusion 같은 강력한 최적화를 유도 할 수있다 (중간 데이터 구조를 제거), 일부 동적 언어는 최적화를위한 형 주석의 일부 제한된 형태를 허용하려고하는 이유를 입력에서 당신은 그건 (당신의 가치의 모양에 강력한 보장을받을 수 있습니다 더 나은 코드를 생성 할 수 있습니다. 낮은 수준의 기능에 대한 액세스에 관한

: 포트란, C와 C++ 아마 최고, 가장 널리 사용되는 언어 "매우 낮은 수준을 갈 수 있습니다."일부 언어는 이러한 기능 중 일부를 제공하려고합니다. 예를 들어, ATS (본래는 기능 프로그래밍 언어입니다. 알기 힘든 베어 메탈이지만 스택 할당 버전 힙 할당에 대한 좋은 제어 기능을 제공합니다. Haskellthe CLR (C#,etc.) 모두 박스 없음 제공) 복합 형을 그러한 낮은 수준의 추론의 특수한 경우로 사용하고 마찬가지로 Rust은 메모리 소비에 대한 낮은 수준의 결정을 내리는 방법을 제공하려고합니다.
그러나 퍼포먼스에 중요한 코드의 작은 부분을 분리 해 놓은 상태에서이를 최적화하여 (약간의 유연성/단순성/유지 관리성을 포기하고 싶을 때) 이것은 확실히 유용하지만 이것은 변하지 않을 것입니다 당신이 임베디드/커널 프로그래머가 아니라면, 일상 생활에서의 당신의 삶. 올바른 추상화 수준을 사용할 수있는 생산적 언어를 통해 전반적으로 더 많은 성능을 얻고 문제에 대한 올바른 디자인 및 알고리즘을 선택하는 데 더 많은 시간을 할애 할 수 있습니다. 물론, 둘 모두를 갖고 싶어 할 수도 있고 가능하지만 어렵습니다.

+0

이것은 완벽합니다. 고마워요. –

0

런타임시 명령형 언어와 명령형 언어를 사용하면 실제로 이점이 있습니까? (또는 해석기로가는 길)?

예. 함수형 언어를 사용하면 인터프리터 작성자가 아마 더 빨리 수행된다는 장점이 있습니다. 당신이 필수적인 것을 사용한다면, 조금 더 적은 메모리와 CPU가 사용될 수 있습니다.

그럼 어떻게 하든지간에 장점이 있습니다.

그러나 명령형 언어로 작성된 함수와 함수형 함수로 작성된 두 개의 해석기가 있고 둘 다 정확하다는 점을 고려할 때 해석기가 사용 된 프로그램의 결과에서 알 수 없습니다.

관련 문제