TypeScriptをLLVM機械語へ直接コンパイルする「Perry」ネイティブコンパイラ
(github.com/PerryTS)従来のTypeScript開発パラダイムでは、高水準の抽象化であるTSコードをJavaScriptへトランスパイルした後、V8やJavaScriptCoreのような重いJITランタイムエンジン(Node.js、Bun、Denoなど)の上で動かす方式が当然視されてきました。
最近オープンソース界隈に登場したPerryは、このような従来のランタイムモデルを完全に取り払い、TypeScriptコードをstandaloneなネイティブバイナリへ直接コンパイルすることを目指す、RustベースのNative-Firstコンパイラです。
💡 コアアーキテクチャと特徴
-
No Runtime(ランタイムゼロ): V8エンジンやElectron、JVMのような重い中間層なしに、SWCでTSコードをパースし、LLVMインフラを通じてターゲットプラットフォームの機械語へ直接ビルドします。
-
クロスプラットフォーム単一ソースビルド: 1つのTypeScriptコードベースから、macOS、iOS、Android、Linux、Windowsをすべてサポートするバイナリを生成します。
-
True TypeScript Support: AssemblyScriptのような「TSに似た別言語」ではなく、Strict Modeを基盤とする完全なTypeScriptエコシステム対応を目指しています。
-
超軽量UIフレームワーク互換: わずか数MB級のバイナリサイズと、0msに近いsub-secondなコールドスタートをうたいます。SwiftUI、GTK4、WinUIといったプラットフォームネイティブGUIとの統合はもちろん、独自のReactレンダラーを通じたJSX記述も可能です。
🛠️ 開発状況と制約(Hacker Newsのフィードバック反映)
最近HNなどで大きな注目を集めているプロジェクトだけに、プロダクションレベルへ進むための課題も明確に議論されています。
-
動的なJS特性の制限: オブジェクトへ実行時に任意のフィールドやメソッドを注入したり、プロトタイプを改変したりするような動的JavaScriptスタイルは、静的コンパイルの性質上サポートされず、厳格で決定論的(Deterministic)なTSサブセットをベースに動作します。
-
Node.js組み込みモジュールのエミュレーション: 現在はhyper、rustls、tokioなどRustエコシステムを基盤に、Node.jsのHTTP標準ライブラリをほぼそのままエミュレーションしています。Fastifyなど一部モジュールのコンパイルに成功しつつ急速に進化していますが、Expressのように動的インポートが絡む複雑なエコシステムのライブラリとの100%互換性は、まだアルファ段階での課題です。
# 使い方は極めてシンプルです
$ perry compile src/main.ts -o myapp
$ ./myapp # 依存性のない純粋なネイティブバイナリを実行
Webエコシステムに閉じ込められていたTypeScriptを、システムプログラミングや超軽量ネイティブアプリの領域へ拡張しようとする試みとして、高性能システムアーキテクチャやLLVMコンパイラパイプラインに強い関心がある人にとって興味深く見守る価値のあるプロジェクトです。
GitHub: https://github.com/PerryTS/perry
まだコメントはありません。