터보 스칼라 컴파일러(THC): 함수형 언어의 JVM 통합 기술
Turbo Haskell
에드워드 크멧트가 개발한 'Turbo Haskell Compiler(THC)'는 GHC 컴파일러가 처리한 코어(Core)를 자바 가상 머신(JVM) 위에서 실행하는 JIT 환경을 제공하여, 함수형 언어를 JVM 생태계에 통합합니다.
이 기술은 Haskell 같은 함수형 언어를 자바 기반의 대규모 시스템에 통합할 수 있게 하여, LLM 연동이나 데이터 분석 등 이종 기술 간 경계를 허물고 개발 범위를 크게 확장해요.
- 단순히 속도 향상을 넘어, THC는 Python, JavaScript 등 다양한 언어와 데이터를 주고받는 다국어 기능을 지원하며, 독립적인 실행 파일로 만드는 AOT 컴파일까지 가능하게 했습니다.
- 이 기술은 Haskell 같은 함수형 언어를 자바 기반의 대규모 시스템에 통합할 수 있게 하여, LLM 연동이나 데이터 분석 등 이종 기술 간 경계를 허물고 개발 범위를 크게 확장합니다.
- 초기 성능 테스트에서는 GHC 대비 10~20% 느린 구간도 보고되었으며, 비(非)꼬리 재귀 호출 시 스택 증가 제한 여부 등은 향후 추가적인 검증과 최적화가 필요한 부분입니다.
Turbo Haskell Compiler(THC)는 GHC 9.14.1의 prim-ops를 구현하고, GHC Core에 대한 JIT 기능을 제공하여 Haskell 코드를 JVM 위에서 실행합니다. THC는 GHC가 담당하는 파싱, 타입 체크, 디슈가링 및 Core 최적화 이후의 과정을 이어받아 자체 런타임 환경인 Truffle/GraalVM을 통해 컴파일하고 실행합니다. 이 과정에서 Template Haskell이나 Linear Haskell 같은 고급 언어 기능도 완전히 지원하며, JIT 외에도 Native Image를 이용한 AOT(Ahead-of-Time) 컴파일이 가능하여 독립적인 실행 파일 생성이 가능합니다.
THC는 Python, Ruby, R, JavaScript 등 다양한 언어로의 다국어 FFI를 제공합니다. 이를 통해 Haskell 코드가 다른 언어의 라이브러리를 활용하고 그 결과를 JIT 컴파일된 Haskell 프로그램으로 직접 가져올 수 있습니다. 특히 UTF-8로 인코딩된 문자열에 대한 데이터 타입 변환은 제로 카피가 가능하며, 동시성 측면에서는 일반 Java 스레딩과 Project Loom을 모두 지원하여 경량의 GHC 스타일 그린 스레딩 환경을 제공합니다.
기술적으로 THC는 핫 테일 콜을 처리하기 위해 트램폴린 메커니즘 대신 코드 변환 기법을 사용해 반복문 형태로 유지하며, SIMD를 활용할 때는 `jdk.incubator.vector` 를 통해 런타임에 '종류' 폭을 선택하고 루프를 JIT 컴파일합니다. 초기 테스트에서는 GHC 대비 3배 빠르거나 느린 성능 범위가 보고되었으나, 개발 과정에서 일부 쉬운 에서 약 10배의 성능 저하도 있었습니다. 또한, 비(非)꼬리 재귀 호출 시 스택 증가 제한 여부는 향후 검증이 필요한 부분입니다.
용어 풀이
- API
- 프로그램끼리 기능을 주고받는 약속된 창구. AI 모델은 보통 API로 불러 써요.
- 벤치마크
- 모델 성능을 같은 조건에서 비교하려고 만든 시험 문제 모음.
THC는 어떤 방식으로 Haskell 코드를 실행하나요?
THC는 GHC가 담당하는 파싱, 타입 체크, 디슈가링 및 Core 최적화 이후의 과정을 이어받아 자체 런타임 환경인 Truffle/GraalVM을 통해 컴파일하고 JVM 위에서 실행해요. 이 과정에서 Template Haskell 같은 고급 언어 기능도 완전히 지원합니다.
다른 프로그래밍 언어와도 연동이 가능한가요?
네, Python, Ruby, R, JavaScript 등 다양한 언어로의 다국어 FFI를 제공해요. 이를 통해 Haskell 코드가 다른 언어의 라이브러리를 활용하고 그 결과를 JIT 컴파일된 Haskell 프로그램으로 직접 가져올 수 있어요.
성능이나 기술적인 한계점은 무엇인가요?
초기 테스트에서는 GHC 대비 3배 빠르거나 느린 성능 범위가 보고되었고, 일부 쉬운 벤치마크에서 약 10배의 성능 저하도 있었습니다. 또한, 비(非)꼬리 재귀 호출 시 스택 증가 제한 여부는 향후 검증이 필요한 부분이에요.