## 🌟 主要変更 - NyIR Core: 25命令 → 26命令(ExternCall追加) - Universal Exchange Vision実現基盤完成 - Everything is Box哲学:外部ライブラリ統一対応 ## 📋 完了した統一作業 - ✅ docs/nyir/spec.md: 26命令正式仕様確定 - ✅ docs/nyir/vision_universal_exchange.md: ChatGPT5ビジョン統合 - ✅ docs/予定/native-plan/copilot_issues.txt: 実装計画全面更新 - ✅ Extension戦略再定義: 言語固有機能に限定 ## 🎯 26命令完全定義 **Tier-0 (8命令)**: Const, BinOp, Compare, Branch, Jump, Phi, Call, Return **Tier-1 (13命令)**: NewBox, BoxFieldLoad, BoxFieldStore, BoxCall, **ExternCall**, Safepoint, RefGet, RefSet, WeakNew, WeakLoad, WeakCheck, Send, Recv **Tier-2 (5命令)**: TailCall, Adopt, Release, MemCopy, AtomicFence ## 🔥 ExternCall革命 外部ライブラリをBox統一APIで利用する革命的機能追加 ## 📚 新規ドキュメント - docs/nyir/: NyIR公開仕様フォルダ新設 - box_ffi_abi.md: Box FFI/ABI完全設計(ChatGPT5) - phase_9_7実装仕様: GitHub Issue #72準備完了 ## 🚀 次期タスク Phase 9.7: Box FFI/ABI実装(Issue #72) - MIR ExternCall命令実装 - WASM RuntimeImports統合 - Universal Library Integration実現 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
3.7 KiB
3.7 KiB
Phase 9.10: NyIR v1 仕様・フォーマット・検証器(公開IRの確立)
目的
- NyashのMIRを公開IR(NyIR 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 / functions(blocks, 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)
- 仕様スケルトン:
docs/nyir.mdひな形生成(命令/効果/検証/等価変換の目次) .nyirパーサ/プリンタ(最小).nybcエンコーダ/デコーダ(最小)nyir-verify(所有森/効果/Phi/到達/終端の基本チェック)nyashel -SをNyIR出力対応に(既存MIRダンプ経路から移行)- Goldenサンプル作成(3〜5本)+CIワークフロー雛形
受け入れ基準(Acceptance)
- 代表サンプルが
.nyirで表現・検証・実行可能(nyir-run) .nybc読み書き往復で等価- CIでinterp/vm/wasmの結果一致(最小ケース)
依存/関連
- 8.5: 25命令の確定仕様
- 9.7: ExternCall/ABI(NyIRにもmethodノードor外部呼を表現)。v1ではExternCallは拡張セクションで可
- 10.x: NyIR→LLVM IR(別Phase)
リスク
- 仕様凍結の硬直化 → 拡張はfeatureビット+拡張セクションへ
- 実装の重複 → Verifier/フォーマットは共有ライブラリ化
最終更新: 2025-08-14