에드워드 케멧, 일주일 만에 GHC Core를 JVM에서 JIT 실행하는 Turbo Haskell 공개
- 에드워드 케멧이 일주일 전 장난삼아 시작한 THC(Turbo Haskell)가 GHC 9.14.1의 모든 prim-op을 구현하고, Truffle/GraalVM으로 GHC Core를 JIT 실행해 JVM 위에서 하스켈을 돌림. Cadenza에서 쓰던 방식을 그대로 가져옴
- 파싱, 타입체킹, desugaring, Core 최적화는 GHC가 맡고 THC는 그 뒤 단계부터 자체 런타임으로 컴파일·실행함. Template Haskell과 Linear Haskell까지 지원하고, Native Image로 AOT 컴파일도 가능
- pandoc, happy, alex는 물론 GHC 자체까지 JIT/AOT 컴파일 대상에 들어감. Cabal로 패키지를 해석하고 Backpack을 포함한 다중 라이브러리 패키지를 지원
- 꼬리 호출은 64비트 블룸 필터로 재귀 꼬리 호출을 탐지해 느린 경로 예외로 연결한 뒤 루프로 바꾸는 방식이고, CHICKEN Scheme의 GC 기법과 비슷한 스택 압축으로 누적 프레임을 정리함. Data.Map 벤치마크에서 폴백 트램폴린 호출 66회 대 빠른 경로 수백만 회
- Python, Ruby, R, JavaScript로 가는 polyglot FFI를 제공하며 UTF-8 문자열의 Data.Text 변환은 제로카피. C/C++ 코드는 네이티브 모드 Sulong(LLVM on JVM)으로 실행하고, SIMD는 Vector API로 런타임에 폭을 골라 루프를 JIT함
Hacker News opinions
Avast가 이 사이트 로딩 자체를 막아버리네. GHC 일부를 재활용해서 하스켈을 JVM으로 돌리는 컴파일러라는데 귀엽긴 한데 왜 굳이 싶음.
JVM 타겟이라고 해놓고 FFI 목록에 Java가 없는 건 좀 이상한데. 오타인지 빠뜨린 건지 모르겠네.
완전 다른 얘기지만 JVM용 하스켈 방언인 Frege가 생각나더라. 최근 커밋은 보이는데 릴리스가 전부 옛날 거라 지금 상태가 어떤지 알 수가 없음.
Frege 오랜만에 듣네. 예전에 로고 작업이랑 자잘한 이슈 좀 도와줬었는데 최신 커밋 확인해봐야겠다. dependabot만 돌아가는 건 아니길.
Turbo Pascal 생각나는데?
파란 TUI IDE가 아니라 JVM 위의 하스켈임. 작가가 컨셉을 낭비했어.
이름은 사람들이 Haskell을 Pascal로 잘못 듣는다는 농담이었대. Ed가 몇 년 전에 ZuriHac에서 그랬다고 했는데 취리히 구글 시절이니 2016년쯤이겠지.
일주일에 커밋 4천 개라니. 내부에서 무슨 일이 벌어지는지 아무도 이해 못 하는 것 같고 그냥 평범한 슬롭처럼 보임. 에이전트가 쓴 걸 본인이 최소한 읽긴 했는지 모르겠네.
Edward Kmett는 하스켈 쪽에서 아주 존경받는 개발자임.
글에 레딧 토론 링크가 걸려 있는데 여기 올라온 댓글 몇 개에 대한 답이 거기 있음.
GraalVM 덕분에 생긴 polyglot FFI는 함수형 코어, 명령형 셸 스타일 설계를 구현할 때 꽤 쓸모 있을 듯.