나는 최근에 기능 프로그래밍, 특히 Haskell과 F #에 대해 더 깊이 연구 해 왔습니다. 인터넷 검색 후 더 유명한 기능 언어 (Scala, F # 등)의 벤치 마크 비교를 찾을 수 없었습니다.
하이브리드라는 점을 감안할 때 일부 언어 (Scala가 염두에 두는 것)에 반드시 공평하지는 않지만 어떤 운영 및 전체에서 어떤 성능을 능가하는지 알고 싶습니다.
답변
따르면 위대한 벤치 마크 게임 , ATS는 빠른 하스켈, 스칼라와 나머지보다, 그리고 중 하나는 뒤에 속도 가까운에 대한 대략적인 넥타이 CL의 변종. 그 후 Ocaml과 F #은 Racket과 Clojure가 뒤쳐지는 것과 거의 같은 속도 범주에 있습니다 …
그러나이 중 어느 것도 실제로는 전혀 의미가 없습니다. 문제, 기계, 컴파일러, 코딩 기술, 때로는 운이 문제입니다. 일반적으로 Haskell과 같은 직접 기계 코딩 언어는 F #과 같은 VM 컴파일 언어보다 성능이 뛰어나고 순수하게 해석되는 언어보다 성능이 뛰어납니다. 또한 일반적으로 정적 형식 언어는 정적 형식으로 인해 동적 형식보다 빠르기 때문에 런타임보다는 컴파일시 모든 형식 작업을 계산할 수 있습니다. 다시 말하지만, 이것은 일반적인 규칙이며 항상 예외가 있습니다. “패러다임”은 그것과 거의 관련이 없습니다.
답변
또한 프로그래밍 언어 의 성능을 측정 / 정량화 할 수 없다는 점도 지적해야 합니다 . 가장 좋은 방법은 특정 프로그램을 실행하여 특정 플랫폼에서 특정 언어 구현 의 성능을 측정하는 것 입니다.
따라서 “가장 빠른 기능적 언어”에 대해 질문 할 때 현재 구현 된 언어 중 최상의 것을 실제로 묻는 것입니다.
@igouy의 의견에 따르면 언어 구현을위한 다른 성능 측정 방법이 있습니다. 예를 들어 컴파일 시간. 그러나 응용 프로그램의 런타임이 언어 자체의 척도가 아니라 언어 구현의 (간접적) 척도라는 사실을 바꾸지는 않습니다.
예를 들어 Java를 고려하십시오. 클래식 (Java 1.0) Java의 언어 기능 만 사용하여 단일 스레드 벤치 마크를 작성한다고 가정하십시오. JDK 1.0을 사용하여 컴파일하고 실행하면 성능이 저하됩니다 ( ‘cos JDK 1.0에는 기본 코드 컴파일러가 없었습니다). JDK 1.1에서 … JDK 1.7로 가면 점진적으로 더 나은 결과를 얻을 수 있습니다. 그러나 이것은 벤치 마크가 동일한 언어 하위 세트를 사용하기 때문에 Java 언어 로 인한 것이 아닙니다 . 오히려 속도 향상은 컴파일러, 런타임 시스템 및 / 또는 클래스 라이브러리 구현의 개선으로 인한 것입니다. 이들은 모두 구현 문제입니다.
다른 요점은 이러한 구현 차이가 동일한 언어에서 실제로 중요 할 수 있다는 것입니다 (예 : 수십 배). 따라서 언어 X에 대한 최상의 구현이 언어 Y의 최상의 (또는 유일한) 구현보다 빠르다는 사실이 반드시 언어 자체에 대해 많은 것을 말해 주지는 않습니다 .
답변
실행 속도만으로 언어를 살펴보면 몇 가지 주요 사항이 누락되었습니다. 속도는 좋은 것이지만 유일한 것은 아닙니다.
Haskell은 매우 강력한 유형 시스템을 사용하여 버그가없고 강력 할 수있는 프로그램을 만듭니다.
Erlang은 내장 된 모니터링 시스템을 사용하여 다양한 유형의 결함에 직면했을 때 엄청난 수준의 신뢰성을 제공 할 수있는 결함 시스템을 생성 할 수 있습니다. 또한 Erlang은 다른 언어와 비교하기 어려운 수준의 동시성을 제공 할 수 있습니다.
사실 현대의 실행 속도는 대부분의 경우에 고려할 사항의 목록보다 훨씬 아래에 있다고 생각합니다. (괜찮은 숫자 계산을하고 있다면 속도에 fortran을 사용하고 싶을 수도 있지만 그렇지 않으면 중요하지 않습니다)