Files
hakorune/docs/nyir/phase_9_10_nyir_spec.md

71 lines
3.7 KiB
Markdown
Raw Normal View History

# Phase 9.10: NyIR v1 仕様・フォーマット・検証器公開IRの確立
目的
- NyashのMIRを公開IRNyIR v1として凍結し、あらゆるフロントエンド/バックエンドの共通契約とする。
- 仕様・テキスト/バイナリフォーマット・厳格検証器・ツール群を整備し、移植性と一貫性を保証する。
成果物Deliverables
- 仕様書: `docs/nyir.md`(命令仕様/効果/未定義なし/検証ルール/等価変換指針)
- フォーマット: `.nyir`(テキスト), `.nybc`(バイナリ)
- 検証器: `nyir-verify`CLI/ライブラリ)
- 変換/実行ツール:
- `nyashel -S`Nyash→NyIRダンプ
- `nyir-run`NyIRインタプリタ
- 参考: `nyir-ll`NyIR→LLVM IR、Phase 10で拡張
- Golden NyIR: `golden/*.nyir`代表サンプルを固定、CIで全バックエンド一致を検証
仕様の要点NyIR v1
- 命令セット: 25命令Tier-0/1/2を凍結
- Tier-0: Const, BinOp, Compare, Branch, Jump, Phi, Call, Return
- Tier-1: NewBox, BoxFieldLoad, BoxFieldStore, BoxCall, Safepoint, RefGet, RefSet, WeakNew, WeakLoad, WeakCheck, Send, Recv
- Tier-2: TailCall, Adopt, Release, MemCopy, AtomicFence
- 効果Effects: pure / mut / io / control再順序化規則を明文化
- 所有フォレスト: 強参照の森strong in-degree ≤ 1、強循環禁止、weakは非伝播
- Weak: 失効時の挙動を決定WeakLoad=null / WeakCheck=false、世代タグ設計を想定
- Bus: ローカルは順序保証、リモートは at-least-onceまたは選択可能
- 未定義動作なし: 各命令の事前条件/失敗時挙動を明示
- バージョニング: `nyir{major.minor}`、featureビットで拡張告知
テキスト形式(.nyir
- 人間可読・差分レビュー向け
- 構造: moduleヘッダ / const pool / functionsblocks, instrs
- コメント/メタデータ/featureビットを扱える簡潔な構文
バイナリ形式(.nybc
- セクション化: header / features / const pool / functions / metadata
- エンコード: LEB128等の可変長を採用、識別子はstring table参照
- 将来の後方互換に備えた保守的設計
検証器Verifier
- 検査: 所有森/強循環/weak規則/効果整合/到達性/終端性/Phi入力整合
- 失敗時は明確なエラーを返し、ロード拒否
- CLI/ライブラリの二態(コンパイラ/実行系どちらからも利用)
Golden / Differential テスト
- `golden/*.nyir` を固定し、interp/vm/wasm/jit/llvm順次で出力一致をCIで検証
- 弱失効/分割fini/境界条件系を重点的に含める
タスクCopilot TODO
1) 仕様スケルトン: `docs/nyir.md` ひな形生成(命令/効果/検証/等価変換の目次)
2) `.nyir` パーサ/プリンタ(最小)
3) `.nybc` エンコーダ/デコーダ(最小)
4) `nyir-verify`(所有森/効果/Phi/到達/終端の基本チェック)
5) `nyashel -S` をNyIR出力対応に既存MIRダンプ経路から移行
6) Goldenサンプル作成3〜5本CIワークフロー雛形
受け入れ基準Acceptance
- 代表サンプルが `.nyir` で表現・検証・実行可能(`nyir-run`
- `.nybc` 読み書き往復で等価
- CIでinterp/vm/wasmの結果一致最小ケース
依存/関連
- 8.5: 25命令の確定仕様
- 9.7: ExternCall/ABINyIRにもmethodードor外部呼を表現。v1ではExternCallは拡張セクションで可
- 10.x: NyIR→LLVM IR別Phase
リスク
- 仕様凍結の硬直化 → 拡張はfeatureビット拡張セクションへ
- 実装の重複 → Verifier/フォーマットは共有ライブラリ化
最終更新: 2025-08-14