Turbo Haskell (THC) コンパイラ:JVM 上で Haskell を実行し、GHC の機能を拡張
Turbo Haskell
Edward Kmett 氏が休暇中に開発を開始した「Turbo Haskell compiler (THC)」は、GHC 9.14.1 の prim-ops を実装し、JVM 上で Haskell を実行する JIT コンパイラを提供します。THC は GHC のパーサー、型チェッカー、最適化の後を引き継ぎ、Truffle と GraalVM を利用して Haskell の Core をコンパイル・実行します。Template Haskell や Linear Haskell といった高度な機能もサポートし、Native Image を用いた AOT コンパイルによる実行可能ファイルの生成も可能です。THC は pandoc、happy、alex、さらには GHC 自身もコンパイル・実行できます。Cabal を使用してパッケージを解決し、複数のライブラリを持つパッケージや Backpack も完全にサポートします。Python、Ruby、R、JavaScript とのポリグロット FFI を提供し、他の言語のライブラリを Haskell プログラム内で利用できます。評価と並行処理に関しては、バイトコードベースおよび AST ベースの JIT ターゲット、シングルスレッド/マルチスレッド実行、GHC バイトコードのサポート、Project Loom を利用した軽量グリーン・スレッディングを提供します。SIMD は GHC prim-ops と incubating Vector API を通じてサポートされ、実行時の SIMD 幅の選択とループの JIT コンパイルが可能です。ホット・テール・コールはループに変換され、再帰時には Bloom filter を使用してテール・コールを検出し、GraalVM によるコード変換を行います。パフォーマンス面では、ウォームアップ後、GHC と比較して 3 倍高速から 3 倍低速の範囲で動作し、多くの場合 10-20% 低速ですが、開発は継続的に行われています。コードは github.com/ekmett/thc で公開されており、IRC の ##thc チャンネルで開発が進められています。
- Edward Kmett氏が開発する「Turbo Haskell compiler (THC)」がGitHubで公開され、GHC 9.14.1のprim-opsを実装してJVM上でHaskellをJITコンパイル・実行する
- TruffleとGraalVMを利用し、GHCのパーサー・型チェッカー・最適化の後段を引き継いでHaskell Coreをコンパイル、Native ImageによるAOTコンパイルで実行可能ファイルを生成できる
- pandoc、happy、alex、GHC自身をコンパイル・実行できることを確認し、Template HaskellやLinear Haskell、Backpackにも対応
- Python、Ruby、R、JavaScriptとのポリグロットFFIを提供し、他言語ライブラリをHaskellプログラムから利用可能
- 実行性能はウォームアップ後でGHC比3倍高速から3倍低速の範囲、多くは10〜20%低速とされ、開発は継続中
- Project Loomを利用した軽量グリーンスレッディングやシングル/マルチスレッド実行、GHCバイトコード、incubating Vector APIによるSIMDをサポート
HaskellをJVM上で動かすJIT/AOTコンパイラ「THC」は、GraalVM/Truffleを基盤にGHCのフロントエンドを再利用し、pandocやGHC自身までコンパイルできる点が技術的に特異。性能はGHC比で3倍速〜3倍遅と幅があり、多くは10〜20%遅い段階だが、JVMエコシステムへの統合による言語間FFIやProject Loomのグリーンスレッド活用など、次世代コンピューティング基盤の選択肢を広げる。現時点では個人休暇中のOSSプロジェクトで収益化の道筋は見えず、直接の投資対象ではないが、GraalVMベースの多言語ランタイムの競争力を測るうえで注視したい。