실제 세계에서 함수형 프로그래밍을 어떻게 사용할 수 있습니까? [닫은]


103

함수형 언어는 상태를 제거하여 버그를 피할 수 있기 때문에 유용 할뿐만 아니라 스레드 수에 대해 걱정할 필요없이 자동으로 쉽게 병렬화 될 수 있기 때문에 좋습니다.

하지만 Win32 개발자로서 내 응용 프로그램의 일부 dll에 Haskell을 사용할 수 있습니까? 그리고 내가 그렇게한다면, 저에게 자동적으로 주어질 실질적인 이점이 있습니까? 그렇다면 무엇이 나에게 이점을 제공합니까?

F #은 여러 코어와 CPU에서 작성하는 함수를 자동으로 병렬 처리합니까? 작업 관리자의 스레드 수가 증가하는 것을 본 적이 있습니까?

기본적으로 내 질문은 어떻게하면 실용적인 방법으로 Haskell을 사용할 수 있고, 그렇게하면 실제로 몇 가지 이점을 볼 수 있습니까?


2
개인적으로 나는 erlang을 조사 할 것입니다. 그러나 그것은 나입니다.
Jason Bunting

2
조금 명확히하기 위해 이미 몇 가지 다른 함수형 프로그래밍 언어에 대한 경험이 있으며 작동 방식과 차이점을 알고 있습니다. 그러나이 질문은 구체적으로 : 어떻게 실제 사용에 적용 할 수 있습니까?
Brian R. Bondy

답변:


41

Real World Haskell이 당신이 찾고있는 책인 것 같습니다. 온라인에서 무료로 읽을 수 있습니다.

http://book.realworldhaskell.org/


인쇄되기를 기다리고 있습니다. 주변에 더 좋은 책 중 하나가 될 것 같습니다. 나는 그것이 서버 실제 OCaml의보다 나은 하스켈에 관심이있는 사람들이 OCaml의 위해하는 것입니다 내기
프리드리히

25

F #에는 다른 CPU 또는 컴퓨터로 기능을 전달하는 마법의 픽시 먼지가 포함되어 있지 않습니다. F # / Haskell 및 기타 함수형 프로그래밍 언어가 수행하는 작업은 생성 된 스레드 또는 CPU와 독립적으로 처리 될 수있는 함수를 쉽게 작성할 수 있도록합니다.

내가 참여하는 팟 캐스트 링크를 여기에 게시하는 것이 옳지 않다고 생각합니다. 조금 어색한 것 같지만 Matt Podwysocki와 이야기 한 Herding Code 에피소드에서 같은 질문을했고 그는 흥미로운 답변을했습니다. 그 에피소드에는 함수형 프로그래밍과 관련된 좋은 링크도 많이 있습니다. 링크 제목 " 함수형 프로그래밍이 중요한 이유 " 라는 제목의 링크를 찾았습니다 . 여기에서 몇 가지 답변을 얻을 수 있습니다.


21
그런 다음 게시하겠습니다 : herdingcode.com/?p=45 :)
Brian R. Bondy


14

이것은 또한 흥미로울 수 있습니다. " 실제 함수 프로그래밍 "

예제는 F # 및 C #으로되어 있지만 이론은 상당히 일반적입니다. 내가 읽은 (사전 릴리스)에서 확실히 흥미롭지 만 지금까지는 Parallel Extensions와 같은 라이브러리를 사용하여 C #을 점점 더 많이 사용하고 싶다고 생각합니다.


여전히 "C #을 더 많이 사용하고 싶다"고 느끼십니까? F #은 몇 가지 흥미로운 기능을 제공합니다. 내가 얻은 가장 큰 장점은 타이핑이 적다는 것입니다 (즉, 솔루션을 코드로 표현하는 과정에서 마찰이 적다는 것을 의미합니다).
Daniel

1
@Daniel은 어떤면에서 더 그렇습니다; p 제가 작업하는 도구는 비정형 일 수 있습니다.
Marc Gravell

8

당신은 언급하지 않았지만 나는 당신이 C ++를 사용하고 있다고 가정합니다. 잠재적으로 쉽게 작동하는 한 가지 방법은 C ++ / CLI에서 F #으로 연결하는 것입니다. C ++에는 관리 코드를 호출하거나 호출 할 수 있도록 "마법의 픽시 먼지"(IJW : It Just Works라고 함)가 포함되어 있습니다. 이를 통해 F # 코드를 호출하는 것은 C # 에서처럼 간단합니다.

나는 이것을 하나의 프로그램 (FreeSWITCH)에서 사용했는데, 이것은 전적으로 C / C ++로 작성되었습니다. 관리되는 단일 C ++ / CLI (/ clr 스위치 사용)를 사용하면 마술처럼 관리되는 코드로 전환되고 거기에서 F # 플러그인을로드하여 실행할 수 있습니다. 배포를 더 쉽게하기 위해 F #은 모든 종속성을 정적으로 연결할 수 있으므로 F # 런타임 파일을 배포 할 필요가 없습니다. CLR 코드를 매력적으로 만드는 또 다른 점은 관리 코드 (대리자)를 C 코드로 전달할 수 있고 런타임이 자동으로 썽크를 생성한다는 것입니다.

Haskell 방식을 사용하기로 결정한 경우 찾고있는 기능은 FFI : Foreign Function Interface입니다. 그러나 F #을 사용하는 C ++ / CLI와 동일한 수준의 통합을 제공하지 않을 것이라고 생각합니다.


6

저는 현재 Haskell을 직접 배우고 있습니다. 배우기 시작하면 학습 경험이 C #과 같은 언어를 배우는 것과 같지 않고 완전히 새로운 세계이기 때문에 그다지 흥미롭지 않은 것 같습니다. 몇 줄의 코드로 표현할 수 있습니다. 코드를 다시 살펴보면 훨씬 간결하고 작고 빡빡했습니다. 나는 그것을 절대적으로 좋아한다! 실제로 다른 대부분의 언어가 허용하는 것보다 더 작고, 유지하기 쉽고, 훨씬 더 복잡한 실제 프로그램을 작성할 수 있습니다.

행운을 빕니다.


4

Win32 및 DLL에 대해 언급 했으므로 관리되지 않는 코드로 작업하고 있다고 가정합니다. 이 경우 GHC가 매우 잘 작동합니다. 작년 말 저는 MS DDE 라이브러리와 통신하기 위해 FFI 를 사용하여 Windows에서 DDE 서버를 작성했으며 놀랍게도 매우 즐거운 경험이었습니다 (특히 제가 Unix 사람이라는 점을 감안할 때). Haskell의 FFI는 강력하며 (예를 들어 C 또는 다른 라이브러리에서 Haskell 함수로의 콜백을 지원하기도 함) C 수준 코드를 작성할 때 Haskell의 유형 검사를 사용하는 것은 꿈이 실현되는 것과 같습니다.

마지막 요점은 Haskell의 주요 장점 중 하나입니다. 유형 시스템은 놀랍습니다. 즉, 강력한 도구와 같습니다. 그것을 잘 활용하려면 시간과 노력이 필요합니다.

그렇습니다. 나머지 코드로 연결되는 Haskell에서 작은 코드를 작성하는 것이 가능합니다 (다른 코드로 연결되는 작은 Haskell 프로그램으로 시작하는 것이 더 쉬울 수 있습니다). 이것에 대해 배우고 가능한 한 어디에서나 사용하는 데 상당한 시간이 걸립니다. 나처럼 하스켈에서 Windows 코드 (제 경우에는 정교한 Excel 추가 기능)와 긴밀하게 통합 된 상당히 중요한 프로젝트를 계획 할 수 있습니다.

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