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

3.5 KiB
Raw Blame History

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=1PHIoff
    • 開発: --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, 統一実行