2025-09-19 22:27:59 +09:00
# 14命令のミニマルIRによる統一実行基盤設計( MIR14, PHIオフ方針)
著者: Nyash Project
2025-09-06 05:48:56 +09:00
2025-09-19 22:27:59 +09:00
要旨
Nyashは「Everything is Box」哲学を核に、14命令( MIR14) の最小IRでInterpreter/VM/JIT/AOT/GUIを目指してきた。本稿ではPhase‑ 15における設計判断として、MIR側のPHI生成を停止( PHI‑ off, エッジコピー合流) し、PHI形成をLLVMハーネス側に委譲する方針を採用した経緯と効果を報告する。現在の評価範囲はPyVM( 意味論リファレンス) とLLVM/llvmlite( AOT/EXEハーネス) に限定し、両者のパリティおよびLLVM側の性能・安定性を中心に示す。
2025-09-06 05:48:56 +09:00
## 1. はじめに
2025-09-19 22:27:59 +09:00
最小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) 、if‑ merge前宣言等で安定性向上
- 不変条件( LLVM側) : PHIはブロック先頭にのみ配置、incomingは型付き `i64 <v>, %bb` (詳細: `docs/reference/mir/phi_invariants.md` )
- トグル:
- 既定: `NYASH_MIR_NO_PHI=1` ( PHI‑ off)
- 開発: `--features phi-legacy` かつ `NYASH_MIR_NO_PHI=0` でPHI‑ on実験
## 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`
2025-09-06 05:48:56 +09:00
## 6. 関連研究
2025-09-19 22:27:59 +09:00
最小IR設計( LLVM/MLIR等) と、多層実行( Truffle/Graal) に対する立ち位置を簡潔に比較。Nyashは「IRは最小・PHIは生成系に委譲」という分担で整合を取る点に新規性。
2025-09-06 05:48:56 +09:00
## 7. 結論
2025-09-19 22:27:59 +09:00
MIR14の簡素化とPHI委譲により、設計・検証・配布ラインを細く強く維持できた。今後はLoopForm( MIR17) や実行器の拡張を、PyVM/LLVMの二系統基準で段階的に進める。
2025-09-06 05:48:56 +09:00
2025-09-19 22:27:59 +09:00
### 謝辞
AI協働( ChatGPT/Gemini) とコミュニティ貢献に感謝する。
2025-09-06 05:48:56 +09:00
2025-09-19 22:27:59 +09:00
### 付録
- 主要トグル: `NYASH_MIR_NO_PHI` , `NYASH_LLVM_USE_HARNESS` , `NYASH_LLVM_TRACE_PHI`
- 仕様参照: `docs/reference/mir/INSTRUCTION_SET.md` , `docs/reference/mir/phi_invariants.md`
2025-09-06 05:48:56 +09:00
2025-09-19 22:27:59 +09:00
### キーワード
ミニマルIR, SSA, PHI合成, LLVM, PyVM, BoxCall, 統一実行
2025-09-06 05:48:56 +09:00