최근 수정 시각 : 2024-09-20 17:11:55

Haskell/하스켈로 만든 프로그램


파일:상위 문서 아이콘.svg   상위 문서: Haskell
1. 개요2. Xmonad3. Darcs4. Pandoc5. House6. Haxl7. 카르다노8. Semantics9. ShellCheck10. Leksah11. 누리12. 기타

1. 개요

이 문서에서는 하스켈로 만든 프로그램을 소개한다.

당연하겠지만, 윈도우보다는 프로그래밍 애호가들의 장인 유닉스 쪽에서 많이 사용된다. 대표적인 것은 Darcs라는 버전 관리 시스템과 Xmonad라는 타일링 윈도우 매니저이다.

2. Xmonad

xmonad는 dwm의 하스켈 버전이다. dwm의 특징은 1000 줄 미만의 단일 C 프로그램으로, 세팅도 헤더파일을 변경하는 식으로 이루어지는 하드코어 윈도우 매니저인데, xmonad도 역시 하스켈 소스파일을 직접 변경하는 식으로 세팅이 이루어지는데, 하스켈이라는 고생산성 언어를 사용한 덕에 dwm에 비해 지원하는 기능이 훨씬 많다. 다만, 사용하기 위해서는 200 메가가 넘는 ghc라는 의존이 딸려오기 때문에 꺼리는 사람들도 종종 있는편. xmonad의 코어는 매우 주의깊게 디자인되었고, Coq라는 Theorem prover(수학적 증명 보조 프로그램, 4색정리도 이 프로그램의 도움으로 증명되었다.)까지 사용하여 검증하는 것으로 유명하다.

3. Darcs

Darcs는 하스켈 프로그램답게 구조와 디자인면에서는 많은 찬사를 받는 버전 컨트롤 시스템이다.

하지만 퍼포먼스에서 C로 짜여진 Git에 비해 많이 밀리기 때문에 현재는 알다시피 Git에 거의 점령당한 상태이다. Darcs가 Git에게 밀리는 것은 Darcs에는 GitHub만큼 훌륭한 접근성을 제공하는 오픈소스 서버가 없기 때문이다.

한편 https://hub.darcs.net에서 Darcs를 호스팅한다.

하스켈 컴파일러인 GHC조차 매우 거대해진 몸집을 감당하지 못해 2011년 Darcs에서 Git으로 넘어갔다. GHC 프로젝트의 저장소가 Darcs에서 Git으로 이전한 가장 큰 이유는 Darcs에서 브랜치와 머지에 문제가 있었기 때문이다.[1]

새로운 이론적 배경·디자인을 가진 Camp가 준비되고 있다. Camp는 아직 희망이 보이지 않고, 그에 반해 Darcs는 지속적으로 퍼포먼스가 개선되고 있다.[2]

4. Pandoc

문서 상호 변환 프로그램/라이브러리로서 Pandoc이 있다. 매우 널리 쓰이는 프로그램이지만, 주로 백엔드로 사용되기 때문에 일반 유저는 그런게 있는지도 모른다. 소스를 직접 컴파일하다보면 가끔 요구되는 것을 볼 수 있다.

5. House

Haskell로 만든 운영체제로, House가 있다. 함수형 언어로 시스템 프로그래밍을 하는 일종의 도전과제 비슷한 개념이지만 꽤 잘 작동한다. 관심있는 사람은 받아서 분석해보는 것도 괜찮을 듯. 다만 현재의 컴퓨터 구조로는 아직 함수형 언어의 장점과 성능을 살리기 어렵기에 느려터진 것은 감수해야 한다.

6. Haxl

2015년에 공개된 오픈소스 프로젝트로는 페이스북에서 공개한 스팸 필터인 Haxl가 있다. 공개된 부분은 필터의 일부인 데이터 액세스 라이브러리. 스팸 필터 중에서 가장 부하가 큰 부분이라고. 당연하지만 스팸 필터 그 자체는 공개 안 했다.

개발 책임자의 말을 빌리면, 기존의 C++ 베이스로 작업하던 FXL이라는 물건으로는 물밀 듯이 밀려오는 스팸을 도저히 감당할 수 없어서 포기하고 하스켈로 개발을 시작했다고 한다. FXL은 2013년부터 사용되었다. 이 또한 순수 함수형 언어의 특징을 따온 DSL이었다. 하루에도 몇 번이나 코드가 갱신되기 때문에 인터프리팅을 통해서 실행하고 있었지만 너무 느렸다고. 대신 컴파일해서 실행·교체[3] 할 수 있는 하스켈에는 상대가 되지 않았다고.[4] 결과적으로 실제 상황에서 20~30% 정도의 성능 향상을 얻을 수 있었고, 특히 복잡한 문제일수록 3배 이상 더 빨라졌다고 한다.[5][6]

다만 하스켈 개발자는 구하기 어려워서, 언젠가 Haxl을 C++로 포팅하는 수순을 밟을지도 모른다고.

실제로 이번 시스템 개발과정에만 하스켈 언어·컴파일러 톱 디자이너만 두 명이나 참가했다(...).

하스켈로 뭘 했는지 간단히 살펴볼 수 있는 슬라이드

7. 카르다노

2017년 10월 1일 발행된 암호화폐 에이다의 블록체인 카르다노가 하스켈로 작성되었다. 카르다노가 디앱의 스마트컨트랙트를 필수로 요구하는 플랫폼 블록체인을 지향하는데도 불구하고, 그걸 하필 하스켈로 만들었기에 업데이트용 하드포크가 항상 지연되어왔다는 지적을 5년간 받고 있다. 카르다노가 만들어진지 무려 4년 반만에 꼴랑 디앱 하나가 돌아가고 있다. 그 이름은 탈중앙화 거래소 역할의 디앱인 선데스왑이다. 그 사이에 이더리움은 디앱 1만개를 확보하였다.

8. Semantics

2019년 GitHub에서 개발한 소스코드 분석 프로그램 Semantics가 하스켈로 작성되었다. 왜 하스켈을 선택했는지 여기에 잘 나와있다.

9. ShellCheck

ShellCheck는 셸 스크립트에서 버그를 자동으로 찾아주는 오픈소스 정적 분석 도구이다.

10. Leksah

하스켈 전용 IDELeksah 또한 하스켈로 개발됐다. Leksah는 Haskel을 반대로 쓴 것이다.

11. 누리

파일:상세 내용 아이콘.svg   자세한 내용은 누리(프로그래밍 언어) 문서
번 문단을
부분을
참고하십시오.

12. 기타

  • Hasura: 오픈소스 GraphQL 엔진
  • hledger: 평문 회계 관리 프로그램
  • SimpleX: 분산 메시징 플랫폼
  • IHP: 웹 개발 프레임워크
  • Hakyll: 정적 웹 사이트 생성기
  • emanote: 평문으로 웹 사이트를 만들어 주는 도구
  • Gitit: 위키 프로그램
  • Carnap: 형식 언어를 만들 수 있는 논리 프레임워크
  • Tidal Cycles
  • Hadolint: 도커 파일 린터
  • git-mediate: 깃 머지 충돌 관리 도구
  • KMonad: 키보드 매니저
  • Duckling
  • Taskell: 할 일 관리 도구


[1] https://mail.haskell.org/pipermail/glasgow-haskell-users/2011-January/019752.html[2] https://darcs.net/Development/Benchmarks[3] CPU나 하드디스크를 실행 중에 바꿔끼는 묘기 핫 스와핑의 소프트웨어 버전[4] https://www.wired.com/2015/09/facebooks-new-anti-spam-system-hints-future-coding/[5] https://engineering.fb.com/2015/06/26/security/fighting-spam-with-haskell/[6] https://engineering.fb.com/2014/06/10/web/open-sourcing-haxl-a-library-for-haskell/


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r392에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r392 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)