JuliaのUnifiedIR:10年遅れのコンパイラIR刷新
KenoのPRは、Juliaの老朽化したコンパイラデータ構造を置き換えるために、方言対応でリージョンベースのIRであるUnifiedIRを提案し、拡張性とエコシステムの統一を目指す。

Keno FischerがJuliaコンパイラに対する重要なプルリクエスト — PR #62334 — を提出した。これは言語の内部IRデータ構造を根本から置き換える提案である。現在のIRは約10年前のもので、コンパイラ開発とエコシステムツールの両方のボトルネックになっている。
何が問題か
現在のIRには3つの大きな問題がある:API設計と所有権セマンティクスが貧弱で使いにくい;拡張性がなく、下流プロジェクトは制限を回避するか、独自のIRをゼロから構築せざるを得ない;そして外部向けシステムとして設計されたことがない。その結果、Juliaコンパイラとそのエコシステム全体に断片化と技術的負債が生じている。
UnifiedIR:置き換え
UnifiedIRは、Compiler、JuliaSyntax、JuliaLoweringと並ぶ新しいトップレベルパッケージである。自己完結型で拡張可能なIRデータ構造と操作を提供する。設計はMLIRと同様に方言対応でリージョンベースだが、元のJulia IRでうまく機能していた要素も保持している。
このPRは以下の既存データ構造を置き換えることを目指す:
- SyntaxTree(JuliaSyntaxから)
- SyntaxGraph(JuliaSyntax/Loweringから)
- CodeInfo(推論用;コード生成とインタプリタは将来のターゲット)
- IRCode
- さまざまなエコシステムIR
コアアーキテクチャ
コアデータ構造は、効率的なIR表現とコアユーティリティを提供する。ユーザーは追加の列(ステートメントごとに1つ)と特定のアプリケーション向けのレイヤードビューで拡張できる。現在定義されているビューは以下の通り:
- 高速なワンパス置換パスのためのIncrementalCompact風拡張
- CFG変換を容易にするリンクリストを使用したLLVM風ビュー。二次動作を回避するためにClaudeと共同開発した新しい順序維持アルゴリズムを搭載
- 配列コンパイラとloweringのためのグラフ埋め込み(制御フロー依存性なし)
- loweringのためのツリーエンコーディング(ルートを除き、すべてのステートメントにユーザーが1つだけ存在)
主な機能
UnifiedIRはリージョンのファーストクラスサポートを導入し、PR #58532のような機能やMLIRとのより良い統合を可能にする。また、方言拡張をネイティブでサポートする。このPRは推論、最適化、JuliaLoweringを新しい構造に移植しているが、ブートストラップはまだ有効になっていない。テストスイートの約半分が新しいコンパイラバージョンでパスする。
結論
これはJuliaのコンパイラインフラストラクチャにとって基礎的な変更である。マージされれば、コンパイラ開発を簡素化し、エコシステムの断片化を減らし、MLIRベースのツールとのより良い統合への道を開く。このPRはまだ作業中であり議論の基礎となるものだが、10年にわたる漸進的な成長の後、Juliaのコンパイラ内部を近代化する真剣な試みを表している。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。