실제 세계에서 하스켈은 무엇에 사용됩니까? [닫은]


475

하스켈 주변에는 과대 광고가 있지만 실제 응용 프로그램에서 어떻게 사용되는지에 대한 정보를 얻기는 어렵습니다. Haskell의 가장 인기있는 프로젝트 / 용법은 무엇이며 왜 이러한 문제를 해결하는 데 탁월합니까?


56
아니요, 명확한 대답이기 때문에 아닙니다. 의견 등을위한 흔들림이 없습니다. 나는 언어가 무엇을 위해 만들어 졌는지 알고 싶습니다.
Sergio Tapia


12
@ Papuccino1, 잠깐, 그것이 무엇이 유용한 지 , 무엇이 만들어 졌는지 알고 싶 습니까? 전자는 그 질문이 요구하는 것이며, 거기에 의견이있을 여지가 많다.
bdonlan

3
@ Papuccino1-제목의 추가 단어가 질문에 어떤 이점을 가져 옵니까? 또한,이 문맥에서 "기능"이라는 용어의 사용을 오해하고 있다고 생각하지만 말하기는 어렵습니다.
Chris Lutz

2
자체 웹 사이트에 따르면 많은 회사들이 다양한 목적으로 사용하고 있습니다 ... haskell.org/haskellwiki/Haskell_in_industry
Julian

답변:


309

이 언어의 일반적인 용도는 무엇입니까?

신속한 응용 프로그램 개발.

"왜 Haskell?"을 알고 싶다면 기능 프로그래밍 언어의 장점 ( https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ) 을 고려해야합니다 .

  • 기능적 프로그램은 ImperativeLanguage 프로그램보다 훨씬 간결한 경향이 있습니다. 이것은 종종 프로그래머 생산성 향상으로 이어집니다

  • FP는 빠른 프로토 타이핑을 권장합니다. 따라서 나는 이것이 ExtremeProgrammers를위한 최고의 소프트웨어 디자인 패러다임이라고 생각합니다. 그러나 나는 무엇을 알고 있습니까?

  • FP는 기능 차원에서 모듈 식이며 ObjectOrientedProgramming은 다른 구성 요소 차원에서 모듈 식입니다.

  • 케이크를 가지고 먹을 수있는 능력. 복잡한 OO 시스템 처리 메시지가 있다고 가정합니다. 모든 구성 요소가 메시지에 따라 상태를 변경 한 다음 메시지가 연결된 일부 객체로 전달할 수 있습니다. 호출 계층 구조의 일부 객체가 메시지에 결함이 있다고 판단한 경우 모든 변경 사항을 쉽게 롤백 할 수있는 것이 너무 멋지지 않습니까? 다른 국가의 역사를 갖는 것은 어떻습니까?

  • 데이터 구조의 해체 (PatternMatching), 변수 바인딩 저장 (LexicalScope with Closure), 강력한 타이핑 (TypeInference), GarbageCollection, 스토리지 할당, 박스형 (포인터-값) 또는 박스형 (직접적인 값) 사용 여부 ) 표현 ...

  • 안전한 멀티 스레딩! 불변 데이터 구조는 데이터 경쟁 조건의 영향을받지 않으므로 잠금으로 보호 할 필요가 없습니다. 기존 객체를 파괴적으로 조작하지 않고 항상 새 객체를 할당하는 경우 할당 및 GarbageCollection 시스템에서 잠금을 숨길 수 있습니다.

이 하스켈 외에도 다음과 같은 장점이 있습니다.

  • 수학 표기법에서 영감을 얻은 명확하고 직관적 인 구문.
  • 기존 목록을 기반으로 목록을 작성하기위한 목록 이해.
  • 람다 식 : 명시적인 이름을 지정하지 않고 함수를 만듭니다. 따라서 큰 수식을 처리하는 것이 더 쉽습니다.
  • Haskell은 완전히 참조 적으로 투명 합니다. I / O를 사용하는 모든 코드는 그대로 표시해야합니다. 이렇게하면 부작용없이 (예 : 화면에 텍스트 배치) ​​코드를 (계산없이) 코드와 분리하는 것이 좋습니다.
  • 게으른 평가는 정말 좋은 기능입니다.
    • 일반적으로 오류가 발생하더라도 결과를 사용하지 않는 한 여전히 작동합니다. 예를 들어 1 / 0목록의 첫 번째 항목으로 넣을 수 있으며 두 번째 항목 만 사용한 경우에도 계속 작동합니다.
    • 스도쿠 솔버 와 같은 검색 프로그램을 작성하는 것이 더 쉽습니다. 왜냐하면 모든 조합을 한 번에로드하지는 않기 때문입니다. 다른 언어로이 작업을 수행 할 수 있지만 기본적으로 Haskell 만 수행합니다 .

다음 링크를 확인할 수 있습니다.


20
다음과 같은 생각은 종종 내 마음을 어지럽 힙니다. 순수한 언어에서는 함수가 동일한 매개 변수를 전달하면 항상 동일한 결과를 반환합니다. 이것은 보증입니다. 대조적으로 명령형 언어는 "문"위에 모든 것을 구축합니다. 성명서에는 어떤 종류의 보증도 제공되지 않습니다 (실행이 시간을 소비하고 열을 생산하는 것을 제외하고). 따라서 기초는 이미 흔들리고 그 위에 뿌린 모든 것이 흔들리는 상태로 유지됩니다. 나에게 이것은 하스켈을 배우는 이유 중 하나였습니다.
Martin Drautzburg

8
이 질문을하고 Go 프로그래밍 언어가 데뷔 한 지 6 년이 지났습니다. 유형 시스템이 약하고 일반적으로 "객관적으로 열등"(기능 / ML 팬에 따르면) 임에도 불구하고 6 년 동안 Haskell의 26 년보다 더 많은 (그리고 더 중요한) 소프트웨어를 제공했습니다. 나는 이것을 사례 연구로 의미한다. 기능적 언어를 되돌려 놓은 것들이 분명히 있으며, 모두가 과대 광고에 기인 한 것은 아닙니다.
weberc2

3
haskell에서 포인트 코딩을 잊어 버린 것은 절대적인 폭발입니다.) haskell의 몇 가지 문제에 손을 대는 것이 너무 재미있었습니다.
J Atkin

8
@MartinDrautzburg 물론 진술은 보증과 함께 제공됩니다. 어떤 종류의 유용한 언어가 보증없이 진술을 했습니까? 예를 들어 C x = 5;에서는 실행 후 x값이 포함되도록 보장합니다 5.
user253751

5
@ E4z9 예. 그러나 C ++에서는 이것이 operator =호출됩니다. 그리고 사용자를 정의하지 않으면 어떻게되는지 보장합니다operator =
user253751

234

이 글의 사람들은 기능적 프로그래밍 언어를 사용해 본 적이없는 사람에게 가장 중요한 점을 놓치고 있다고 생각합니다. 함수형 프로그래밍을 처음 사용하는 경우 Haskell은 이전에는 생각하지 못했던 방식으로 생각하게합니다. 결과적으로 다른 영역 및 다른 언어에서의 프로그래밍이 향상됩니다. 얼마예요? 정량하기 어렵다.


2
저는 iPhone, Mac을 사용하고 있습니다. 하스켈은 어디에 사용됩니까? 필자가 사용한 앱은 Objective-C 또는 Swift + 데이터베이스 및 서버 용으로 작성되었습니다. 스위프트도 작동 할 수 있습니다. 그래서 나는 그것이 어디에 사용되는지에 대해 혼란스러워합니다
Honey

2
Facebook은 스팸 탐지 기능을 제공합니다 : code.facebook.com/posts/745068642270222/…
Alex

25
다른 톤으로 작성된이 대답은, 하스켈은 IMO 훌륭한 범용 언어가되지 않습니다 프로그래머를위한 좋은 운동이라고 말한다
통행으로

5
Keera Studios에서는 Haskell을 사용하여 iOS 및 Android 게임과 앱을 작성합니다.
Ivan Perez

1
나는 이것에 전적으로 동의합니다. 나는 수십 년 동안 명령형 언어로 많은 코드를 작성했습니다. 나는 몇 달 동안 Haskell을 탐색 해 왔으며 이전에는 생각하지 못했던 것들에 마음이 열렸습니다.
Adahus

87

Haskell과 같은 범용 언어의 장점은 다음과 같습니다. 일반적인 프로그램 작성.

실제로 사용되는 것을 위해, 나는 그것을 확립하는 세 가지 접근법을 가지고 있습니다 :

그래픽, 네트워킹, 시스템 프로그래밍, 데이터 구조, 데이터베이스, 개발, 텍스트 처리에 적합 함을 나타냅니다.

그리고 마지막으로, 그것이 실제로 강점에 대한 나의 의견 :

귀하의 질문이 구체적으로 답변되어야하는 경우 귀하의 질문이 얼마나 광범위한 지에 대해 이해하기를 바랍니다.


15
태그 클라우드 고장
엘리엇 카메론

태그 클라우드는 wordcloud를 사용하여 생성 되었습니까?
야누스 트롤 슨

29

Haskell의 한 가지 예는 "1200 줄 미만의 코드에서 기능을 갖춘 창 관리자"인 xmonad 입니다.


18

에서 하스켈 위키 :

Haskell은 항공 우주 및 방위, 금융, 웹 스타트 업, 하드웨어 설계 회사 및 잔디 깎기 제조업체에 이르기까지 다양한 용도로 상업적으로 사용됩니다. 이 페이지는 Haskell의 산업 사용에 관한 자료를 수집합니다.

Wikipedia에 따르면 Haskell 언어는 기존 기능 언어를 기능 언어 설계에 대한 향후 연구에 사용될 수있는 공통 언어로 통합해야 할 필요성에서 만들어졌습니다.

이용 가능한 정보에 근거하여 그것이 원래의 목적으로 생겨 났으며 연구 이상의 용도로 사용되었습니다. 이제는 범용 기능 프로그래밍 언어로 간주됩니다.

그래도 "왜 사용해야합니까?"라고 스스로에게 묻는다면 왜 사용해야합니까?를 읽으 십시오. Haskell Wiki 소개 섹션.


13

하스켈은 범용 프로그래밍 언어입니다. 다른 언어를 사용하는 모든 작업에 사용할 수 있습니다. 당신은 당신 자신의 상상력에 의해 제한되지 않습니다. 그것이 적합한 것은 무엇입니까? 글쎄, 거의 모든 것. 기능적 언어가 뛰어나지 않은 작업은 거의 없습니다.

네, 저는 Dreamincode의 Rayne입니다. :)

또한 Wikipedia 페이지를 읽지 않은 경우 기능 프로그래밍은 객체 지향 프로그래밍이 패러다임과 같은 패러다임이라고 언급하고 싶습니다. 당신이 모르는 경우에 대비하여. Haskell은 또한 작동한다는 점에서 기능적입니다. 그것은 아주 잘 작동합니다.

언어가 객체 지향 언어가 아니기 때문에 언어가 어떤 것에 의해 제한되어 있다는 것을 의미하지는 않습니다. Haskell은 범용 프로그래밍 언어이며 Java와 마찬가지로 범용입니다.


9

멋진 페이스 북이 PHP 코드를 다시 작성하기위한 자동화 된 도구를 만들었습니다. 소스를 추상 구문 트리로 구문 분석하고 일부 변환을 수행합니다.

if ($f == false) -> if (false == $f)

나는 왜 그런지 모르겠지만, 그것은 그들의 특정한 스타일 인 것 같습니다.

https://github.com/facebook/lex-pass

우리는 작은 도메인 특정 언어를 만들기 위해 haskell을 사용합니다. 엄청난 양의 데이터 처리. 웹 개발. 웹 거미. 테스트 응용 프로그램. 시스템 관리 스크립트 작성 다른 당사자와 통신하는 백엔드 스크립트 모니터링 스크립트

실제로 모든 종류의 물건. 수학적으로 다소 기울어지면 매우 강력하고 유용한 기능을 갖춘 일상적인 범용 언어입니다.


6
다시 : FB 스타일, == 앞에 거짓을 두는 것은 하나를 잊어 버리고 = 만 쓰는 경우 =를 의미하면 의도하지 않은 할당 작업을 자동으로 수행하고 정상적으로 계속하는 대신 결과 동작이 더 잘못 될 것입니다.
Magnus

그것은 영리합니다. 특히 컴파일 시간이라고 알려진 오류.
Edgar Klerks

@ EdgarKlerks, PHP는 컴파일 시간이 없습니다. 이로 인해 먼 코드에서 기괴한 동작이나 오류가 발생하지 않고 실수가 발생한 위치에서 예외가 발생합니다.
dfeuer

false왼쪽 에 글 을 쓰면 이점이 있지만 도구를 사용하여 자동으로 수행하는 요점은 보이지 않습니다. 이미 ==운영자 가 있으면 그 부분에 버그가 없다는 것을 이미 알고 있습니다. lex-pass는 잡기위한 것이며, =대신에 렉 패스가 있다면 의도적으로 그렇게 말할 수있는 방법이 없습니다.
제레미 목록

1
@JeremyList 아마도 코딩 스타일이 엄격 할 수도 있습니다. 깔끔한 형식의 코드가보다 깔끔한 형식의 코드를 작성하도록 초대한다는 것을 알 수 있습니다. 그냥 거친 추측입니다.
Edgar Klerks

6

에서 하스켈 :

Haskell은 엄격하지 않은 의미 체계와 강력한 정적 입력 기능을 갖춘 표준화 된 범용 순수 기능 프로그래밍 언어 입니다. 그것은 논리 학자 Haskell Curry의 이름을 따서 명명되었습니다.

기본적으로 Haskell을 사용하면 일반적으로 다른 범용 언어 (예 : C #, Java, C, C ++ 등)를 사용하여 거의 모든 것을 만들 수 있습니다.


5

예를 들어, 대화 형 실시간 HTML5 웹 응용 프로그램을 개발합니다. 컴파일러는 Haskell에서 구현되고 구문은 Haskell에서 많이 빌리는 Elm을 참조하십시오 .


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