Hacker News인프라 · 데브옵스

Haskell 프로그램을 JVM에서 돌리는 새로운 JIT 컴파일러 THC 공개

원제 Turbo Haskell

117 포인트댓글 25
Key Point

GHC에서 컴파일한 Haskell 코드를 JVM 위에서 고성능으로 실행할 새로운 선택지이며, 다른 언어 라이브러리 직접 연동과 경량 스레드 같은 기능으로 Haskell의 실용성을 높이고 있다.

핵심 요약

  • Edward Kmett이 GHC 9.14.1의 모든 prim-ops을 구현한 'Turbo Haskell compiler' THC를 개발했다.
  • GHC가 파싱·타입체크·최적화까지 담당하고, THC가 Core를 받아 Truffle/GraalVM 위에서 JIT 컴파일해 실행한다.
  • Template Haskell과 Linear Haskell 등 고급 기능을 완벽히 지원하며, JIT와 Native Image를 통한 AOT 컴파일 모두 가능하다.
  • Cabal 패키지를 해석하고 여러 라이브러리를 포함한 Backpack도 지원한다.
  • Python·Ruby·R·JavaScript로의 다국어 FFI를 제공해, 다른 언어 라이브러리를 Haskell 프로그램에서 직접 사용 가능하다.
  • Data.Text와 Truffle 문자열 간 FFI 변환은 UTF-8의 경우 복사 없이 진행되며, C/C++ 코드는 Sulong(JVM 위의 LLVM)으로 실행된다.
  • 바이트코드 기반과 AST 기반 두 가지 Truffle 백엔드를 지원하며, 단일 스레드와 다중 스레드 모드 모두 가능하다.
  • Project Loom 경량 스레드와 HEC 스타일 런타임을 통해 GHC식 그린 스레드와 MVar을 저비용으로 지원한다.
  • SIMD는 GHC prim-ops와 Java의 Vector API를 사용해, 런타임에 SIMD 너비를 선택할 수 있다.
  • 자주 실행되는 꼬리 호출을 반복문으로 변환하고, 64비트 블룸 필터로 재귀적 꼬리 호출을 감지해 최적화한다.
  • 컴파일 초기에 성능을 중시해 최종 워밍업 후 GHC 대비 3배 빠른 것부터 3배 느린 것까지 나왔으나, 최근 기능 확대로 일부 10배 느려진 부분도 있다.
  • Compressed oops를 사용해 메모리 참조를 32비트 오프셋으로 표현하면 힙을 약 32GB로 제한할 수 있다.
  • 코드는 github.com/ekmett/thc에서 공개되며, irc.libera.chat ##thc 채널에서 개발이 진행 중이다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗