Files
hakorune/docs/private/papers/paper-a-mir13-ir-design/main-paper-jp.md

55 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 14命令のミニマルIRによる統一実行基盤設計MIR14, PHIオフ方針
著者: Nyash Project
要旨
Nyashは「Everything is Box」哲学を核に、14命令MIR14の最小IRでInterpreter/VM/JIT/AOT/GUIを目指してきた。本稿ではPhase15における設計判断として、MIR側のPHI生成を停止PHIoff, エッジコピー合流し、PHI形成をLLVMハーネス側に委譲する方針を採用した経緯と効果を報告する。現在の評価範囲はPyVM意味論リファレンスとLLVM/llvmliteAOT/EXEハーネスに限定し、両者のパリティおよびLLVM側の性能・安定性を中心に示す。
## 1. はじめに
最小IRで多様な実行形態を統一する挑戦では、IRの表現力と実装コストの均衡が鍵となる。Nyashは命令の削減27→13→14とAPI統一BoxCallでIRを簡素に保ちつつ、評価基準をPyVM意味論とLLVM生成物に絞ることで、開発・検証速度を高めた。
## 2. MIR14の設計原則
- 命令セット: const/binop/unary/compare/branch/jump/ret/phi/call/boxcall/typeop/arrayget/arrayset/cast/…(詳細は `docs/reference/mir/INSTRUCTION_SET.md`
- Box中心: 呼び出しとABI境界はBoxCall/PluginInvokeに一本化
- 可観測性: JSON v0、IRダンプ、PHI配線トレースを整備
- 非対象(現段階): MIR側の最適PHI配置の探索・検証責務をLLVMへ移譲
## 3. PHIオフ方針とLLVM側合成
- 方針: MIRはPHIを出さず、分岐合流は「合流先で参照される値」を各前任ブロックからエッジコピーで集約
- LLVM: ブロック先頭にPHIを形成typed incoming、ifmerge前宣言等で安定性向上
- 不変条件LLVM側: PHIはブロック先頭にのみ配置、incomingは型付き `i64 <v>, %bb`(詳細: `docs/reference/mir/phi_invariants.md`
- トグル:
- 既定: `NYASH_MIR_NO_PHI=1`PHIoff
- 開発: `--features phi-legacy` かつ `NYASH_MIR_NO_PHI=0` でPHIon実験
## 4. 実装概要(評価対象)
- PyVM: JSON v0→MIR実行の意味論基準。短絡やtruthy規約の基準線
- LLVM/llvmlite: AOT/EXE生成・IRダンプ・PHI合成の実働ライン
- 実行例:
- LLVMハーネス: `NYASH_LLVM_USE_HARNESS=1 NYASH_LLVM_DUMP_IR=tmp/nyash.ll ...`
- PHIトレース: `NYASH_LLVM_TRACE_PHI=1`
## 5. 評価計画
- パリティ: PyVM vs LLVMの出力一致代表スモーク
- 性能: LLVMの実行時間/起動時間/メモリ
- 安定性: PHIトレース整合、空PHI未発生の確認
- 再現コマンド:
- parity: `tools/parity.sh --lhs pyvm --rhs llvmlite apps/tests/CASE.nyash`
- build paper (PDF/TeX): `tools/papers/build.sh a-jp`
## 6. 関連研究
最小IR設計LLVM/MLIR等と、多層実行Truffle/Graalに対する立ち位置を簡潔に比較。Nyashは「IRは最小・PHIは生成系に委譲」という分担で整合を取る点に新規性。
## 7. 結論
MIR14の簡素化とPHI委譲により、設計・検証・配布ラインを細く強く維持できた。今後はLoopFormMIR17や実行器の拡張を、PyVM/LLVMの二系統基準で段階的に進める。
### 謝辞
AI協働ChatGPT/Geminiとコミュニティ貢献に感謝する。
### 付録
- 主要トグル: `NYASH_MIR_NO_PHI`, `NYASH_LLVM_USE_HARNESS`, `NYASH_LLVM_TRACE_PHI`
- 仕様参照: `docs/reference/mir/INSTRUCTION_SET.md`, `docs/reference/mir/phi_invariants.md`
### キーワード
ミニマルIR, SSA, PHI合成, LLVM, PyVM, BoxCall, 統一実行