Haskell에서 얻은 지식과 기술을 수출하기 위해 가장 호환되고 널리 사용되는 생산 언어는 무엇입니까?


14

나는 평범하고 단순한 Haskell을 좋아합니다. Haskell은 프로덕션 소프트웨어에 사용되지만 특히 내가 본 것에서 널리 배포되지는 않습니다. 생산 프로젝트와 관련하여 가장 유사하고 여전히 널리 사용되는 언어는 무엇입니까?

또한 많은 플랫폼에서 사용 가능한 첫 번째 부분과 동일한 언어입니까? 그렇지 않은 경우 광범위한 플랫폼 배포를 사용하는 가장 좋은 대안은 무엇입니까? 거대한 무리 나 가족이 아닌 할 일 목록에 넣을 단일 언어를 원합니다. 확실한 증거는 장점이 될 것입니다.

답변:


21

Haskell은 ML 언어 군과 가장 밀접한 관련이 있습니다. 여기에는 물론 OCaml 과 .NET 플랫폼의 F # 도 포함 됩니다. 이러한 언어는 유형 시스템의 기초와 데이터 사용 방법 (대수 데이터 유형, 패턴 일치, 유형 유추 등)을 Haskell과 공유합니다. 물론 다른 점에서 Haskell과 크게 다를 수 있습니다. 대부분의 ML은 엄격하고 불결합니다. 유형 시스템 및 언어 설계 연구를위한 수단으로서 Haskell의 인기는 대부분의 ML 스타일 언어가 덜 강력하지만 이해하기 쉬운 유형 시스템을 갖는 경향이 있음을 의미합니다. 당신이 그리워 하는 동안 말할 수 아마Haskell에 관한 몇 가지 사항, 특히 처음에는 대부분의 Haskell 프로그래머가 ML에서 가정에서 편안하게 기본적인 기본 단계를 편안하게 느낄 것입니다. Haskell 과 전체 구조 가 동일한 언어를 원한다면 ML이 가장 좋습니다.

스칼라 의 기능적 측면ML 전통에서도 많은 영향을 받았으며 Haskell에 익숙한 고급 유형 시스템 기능과 위의 통합 된 표준 OOP 시스템을 가져옵니다. ML 스타일 언어의 OO는 "기본 기능 도구가있는 모델 OO"의 대부분으로 접근하는 경향이 있지만 Scala는 Java 스타일 OO를 사용하고 숨 쉬고 있습니다. 이것은 여러분이 상상할 수 있듯이 Java interop에 이점이 있으며 OO 프로그래머에게 친숙한 작업 환경을 제공합니다. 그러나 Haskell 배경에서 비롯된 Scala에서 여러 기능을 함께 사용하면 기능적인 관용구가 어려워지고 대부분의 Java API가 잘못 설계되어 불필요하게 사용하기 어려워지는 방식에 짜증이 날 것입니다.

마지막으로, Clojure 는 고려하기가 이상해 보이지만 실제로는 Haskell과 더 많은 철학적 측면에서 공통점이 많습니다. Clojure의 상태 및 가치 대 정체성에 대한 접근 방식에서 찾을 수있는 대부분은 유형 시스템을 통해 Haskell이 공식화 한 것과 매우 유사합니다. 이에 따라 Clojure는 Java interop을 더 작은 수준으로 강조하고 OOP에서 드래그하는 것에 대해 크게 걱정하지 않으므로 기능 프로그래밍 자체에 대한 Clojure의 접근 방식 은 이미 익숙한 것에 가장 가깝습니다. 내 견해로는 클로저가 하스켈 외에 STM을 구현 한 유일한 언어라고 말하고 있다고 생각합니다.간단하고 효과적이며 작동합니다. 반면 Clojure는 Lisp 전통에서 비롯된 정적 유형 시스템과 ML에 영향을받는 언어에서 발견되는 대수 데이터 유형 및 패턴 일치에 중점을 두지 않습니다. 그리고 물론 그것은 Lisp이며, 그 자체는 일부 사람들에게는 부정적인 것입니다 (그러나 나는 왜 그런지 모르겠습니다).

함수 프로그래밍에 대한 나의 첫 경험이 Scheme에 있다는 면책과 함께, 나는 아마도 Clojure에 의지 할 것이다. 아마도 OCaml이 두번째 선택 일 것이다.


1
F #은 OCaml에서 파생 된 것이 아니라면 영감을 받았다고합니다. 이전 SO 질문 F #과 OCaml 은 그 관계에 대한 좋은 토론을 다룹니다. .NET을 사용하는 경우 F #이 탁월한 선택이며 Microsoft는 이제 F #을 "일등".NET 언어로 간주합니다. JVM 측면에서 Scala는 산업 사용 기록을 가지고 있으며 Clojure는 차트에서 상승하고있는 것으로 보입니다. 시장이 아직이 객체 기능 공간에서 확실한 승자를 선언하지 않았기 때문에 현재로서는 최선의 단일 선택을 모릅니다.
John Tobler

4

나는 그것을 직접 사용하지는 않았지만 때로는 Scala가 블로그 나 프로젝트 설명에 팝업되는 것을 보았고 Haskell의 주요 개념이 필요하다고 생각합니다. 스칼라는 JVM으로 컴파일하고 Java와 상호 운용 할 수 있습니다.


3

기능적인 대안은 Erlang 입니다. 동시 언어이지만 순차 서브 세트는 기능 언어의 많은 특성 (예 : 클로저, 불변 데이터 및 패턴 일치)이있는 순수 기능 언어입니다. 그것은 리눅스, 다양한 유닉스, 윈도우 및 macosx를 포함한 많은 플랫폼에서 실행됩니다. JVM에는 erjang 구현도 있습니다 . 다른 언어와 쉽게 의사 소통하고 공존 할 수 있는데, 이것이 자주 사용되는 방식입니다.

기본 사이트를 확인하십시오 .


3

Clojure는 점점 더 널리 사용되고 있으며 피상적 인 수준에서 하스켈처럼 보이지는 않지만 조금 더 깊게 보이면 하스켈에서 영감을 얻은 것으로 매우 유사한 기능적 스타일을 장려합니다.

Haskell 사용자가 친숙하고 매력적으로 느낄 수있는 주요 Clojure 기능 :

  • 핵심 언어는 순전히 기능적 이며 부작용이 발생할 수 있지만 특정 위치 (예 : STM 참조, IO 함수, Java 상호 운용성)에 묻힐 수 있습니다.
  • 모든 데이터 구조는 불변적이고 영구적입니다
  • 게으름-Clojure 의 유비쿼터스 게으른 시퀀스를 통해 크게 달성되었으며, 이는 Haskell 사용자에게 매우 친숙 할 것입니다. 무한 게으른 시퀀스가 ​​좋습니다.
  • 소프트웨어 트랜잭션 메모리 -Clojure에서 가변 상태를 처리하는 주요 방법입니다. Rich Hickey가 Clojure의 정체성과 주에 대한 접근 방식을 설명하는 훌륭한 비디오를 시청할 가치가 있습니다. http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

주요 차이점 (관심에 따라 긍정적이거나 부정적 일 수 있음) :

  • 내 관찰에 따르면 관용적 클로저 스타일은 가능한 한 순수한 기능을 고수하는 것입니다.
  • 정적 타이핑이 아닌 동적 (정적 유형 힌트는 성능 최적화를 위해 선택적으로 사용할 수 있지만)
  • 전체 Java 라이브러리 생태계에 쉽게 액세스 할 수있는 JVM 언어입니다. 제 생각에는 실제 적용 가능성 측면에서 가장 큰 장점입니다.
  • 리스프 구문. 따라서 모든 괄호를 통해 보는 법을 배워야하는 비용으로 호모 닉의 모든 이점을 얻을 수 있습니다.

개인적 관점 : Clojure 이전에 Haskell을 배웠고 Haskell의 우아함과 수학적 순도를 좋아했습니다. Clojure는 많은 영감을 얻고 Haskell에서 많은 훌륭한 기능을 차용하지만 훨씬 실용적이고 실용적인 언어입니다. 특히 Java 라이브러리 에코 시스템을 활용할 수 있다는 엄청난 가치를 세면 "완료"를위한 훌륭한 언어입니다.


1

Haskell을 좋아하지만 JVM 용 코드를 작성 해야하는 경우 frege흥미로울 수 있습니다. Haskell 2010에 최대한 가깝게 설계되었지만 Java 코드를 생성합니다.

물론, frege 자체는 "가장 널리 사용되는 프로덕션 언어"(최근에 발표 된)와 같지 않지만 Java는 확실합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.