9.5 KiB
9.5 KiB
🤖 Nyash MIR 26命令仕様書 (ChatGPT5設計版)
Everything is Box哲学・完璧なIR化実現 - 2025年8月17日版
🎯 概要
Nyash MIR 26命令は、ChatGPT5 + AI大会議により設計された、「化け物に伸びる余白」と「実装の現実」の最適バランスを実現する中間表現です。
🌟 設計思想
- RISC原則: 直交性・シンプル性重視
- 階層化設計: Tier-0/1/2による段階的実装
- Everything is Box: Box中心のセマンティクス
- Effect System: 最適化安全性の確保
- 所有権森: メモリ安全性の言語レベル保証
🏗️ 26命令完全仕様
Tier-0: 普遍的コア (8命令)
コンパイラ・仮想マシンの基盤となる必須命令
| 命令 | 形式 | 効果 | 説明 |
|---|---|---|---|
| Const | %dst = const value |
pure | 定数値生成 |
| BinOp | %dst = %lhs op %rhs |
pure | 二項演算(+,-,*,/,==,!=,<,>,and,or等) |
| Compare | %dst = %lhs cmp %rhs |
pure | 比較演算(専用最適化用) |
| Branch | br %cond -> %then, %else |
control | 条件分岐 |
| Jump | jmp %target |
control | 無条件ジャンプ |
| Phi | %dst = phi [%val1:%bb1, %val2:%bb2] |
pure | SSA φ関数 |
| Call | %dst = call %func(%args...) |
context | 関数呼び出し |
| Return | ret %value? |
control | 関数戻り |
Tier-1: Nyashセマンティクス (13命令)
Everything is Box哲学の核心実装
| 命令 | 形式 | 効果 | 説明 |
|---|---|---|---|
| NewBox | %dst = new_box "Type"(%args...) |
mut | 強所有Box生成(所有森ノード) |
| BoxFieldLoad | %dst = %box.field |
pure | Boxフィールド読み取り |
| BoxFieldStore | %box.field = %value |
mut | Boxフィールド書き込み |
| BoxCall | %dst = %box.method(%args...) |
context | Boxメソッド呼び出し |
| ExternCall | %dst = extern %iface.method(%args...) |
context | 外部ライブラリ呼び出し |
| Safepoint | safepoint |
io | 分割fini・割込み許可ポイント |
| RefGet | %dst = ref_get %ref |
pure | 参照から値取得 |
| RefSet | ref_set %ref = %value |
mut | 参照先差し替え(所有規則検証付き) |
| WeakNew | %dst = weak_new %box |
pure | weak参照生成 |
| WeakLoad | %dst = weak_load %weak |
pure | weak参照から値取得(失効時null) |
| WeakCheck | %dst = weak_check %weak |
pure | weak参照生存確認 |
| Send | send %data -> %target |
io | Bus送信 |
| Recv | %dst = recv %source |
io | Bus受信 |
Tier-2: 実装補助・最適化友好 (5命令)
JIT/AOT最適化の基盤
| 命令 | 形式 | 効果 | 説明 |
|---|---|---|---|
| TailCall | tail_call %func(%args...) |
control | 末尾呼び出し最適化 |
| Adopt | adopt %parent <- %child |
mut | 所有権移管(親が子を取り込み) |
| Release | release %ref |
mut | 強所有解除(weak化/null化) |
| MemCopy | memcopy %dst <- %src, %size |
mut | 小規模メモリ移動最適化 |
| AtomicFence | atomic_fence %ordering |
io | 並行時順序保証 |
🎭 Effect System - 最適化基盤
効果分類と最適化ルール
Pure効果 (8命令)
Const, BinOp, Compare, Phi, BoxFieldLoad, RefGet, WeakNew, WeakLoad, WeakCheck
- ✅ 再順序化可能: 副作用なし
- ✅ 共通部分式除去: 同一計算結果再利用
- ✅ 不変コード移動: ループ外移動可能
Mut効果 (5命令)
NewBox, BoxFieldStore, RefSet, Adopt, Release, MemCopy
- ⚠️ 同一リソース順序保持: 同じBox/同じFieldで依存関係維持
- ✅ 異なるリソース並列化: 別Box操作は並列実行可能
Io効果 (4命令)
Safepoint, Send, Recv, AtomicFence
- 🔒 順序保持必須: プログラム順序で実行
- ❌ 再順序化禁止: 副作用の整合性確保
Control効果 (4命令)
Branch, Jump, Return, TailCall
- 🌊 制御フロー変更: 基本ブロック境界制御
- 📊 静的解析対象: CFG構築・到達可能性解析
Context依存効果 (3命令)
Call, BoxCall, ExternCall
- 🔄 呼び出し先依存: 関数・メソッドの効果を継承
- 📝 BID/型情報: ExternCallはBID仕様から効果決定
🔧 所有権森システム
強参照森 (Ownership Forest)
// 基本原則: strong in-degree ≤ 1
%parent = NewBox "Parent"()
%child = NewBox "Child"()
Adopt %parent <- %child // 子を親の強所有に移管
検証ルール
- ✅ DAG構造保証: 強参照による循環禁止
- ✅ 単一所有: 各Boxは最大1つの強参照のみ
- ✅ 所有移管: Adopt/Releaseによる安全な移転
weak参照システム
%weak = WeakNew %box // weak参照生成
%alive = WeakCheck %weak // 生存確認 (bool)
%value = WeakLoad %weak // 値取得 (失効時null)
決定的挙動
- 🎯 失効時null: WeakLoadは例外なしでnull返却
- 🎯 失効時false: WeakCheckは例外なしでfalse返却
- 🔒 所有権なし: weakは削除を阻止しない
🚀 削減戦略 - 35命令からの移行
削除対象命令 (17命令)
BinOpに統合
UnaryOp→BinOp(not %a → %a xor true)
BoxField操作に統合
Load/Store→BoxFieldLoad/BoxFieldStoreArrayGet/ArraySet→BoxFieldLoad/BoxFieldStore(配列もBoxのフィールド)
intrinsic化
// 削除前
Print %value
Debug %value "message"
// 削除後(intrinsic化)
Call @print, %value
Call @debug, %value, "message"
完全削除
Copy, Nop→ 最適化パス専用(MIRから除外)TypeCheck, Cast→ 型システム・最適化で処理Throw/Catch→ Call経由例外ハンドリング
統合・置換
RefNew→ 削除(RefGetで代用)BarrierRead/BarrierWrite→AtomicFence統合FutureNew/FutureSet/Await→NewBox + BoxCall実装
新規追加命令 (10命令)
Box操作の明示化
BoxFieldLoad/BoxFieldStore→ Everything is Box核心Adopt/Release→ 所有権移管の明示
弱参照完全対応
WeakCheck→ 生存確認の明示Send/Recv→ Bus操作の一次市民化
最適化基盤
TailCall, MemCopy, AtomicFence→ JIT/AOT準備
📊 段階的移行戦略
Phase 1: 共存実装 (1週間)
- 新旧命令両対応のMIRパーサー実装
BoxFieldLoad/BoxFieldStore等の新命令追加- 既存命令は保持したまま新形式も受け入れ
Phase 2: フロントエンド移行 (1週間)
- AST→MIR生成を新形式のみに変更
Load/Storeの代わりにBoxFieldLoad/BoxFieldStore生成- intrinsic化対象は
Call @intrinsic_name形式で生成
Phase 3: 最適化パス移行 (1週間)
- 全最適化パスを新命令対応に修正
- Effect分類の正確な実装
- 所有権森検証ルール実装
Phase 4: バックエンド移行 (1週間)
- Interpreter/VM/WASMの新命令対応
- intrinsic関数の実装(@print, @debug等)
- 削除予定命令の段階的無効化
Phase 5: 旧命令削除 (1週間)
- 削除対象17命令の完全除去
- テストスイート更新
- ドキュメント整備
🧪 検証・テスト戦略
Golden MIR テスト
# 全バックエンドでMIR出力一致確認
./target/release/nyash --dump-mir-26 program.hako > golden.mir
./target/release/nyash --backend vm --dump-mir-26 program.hako > vm.mir
./target/release/nyash --backend wasm --dump-mir-26 program.hako > wasm.mir
diff golden.mir vm.mir && diff vm.mir wasm.mir
所有権森検証
// 検証項目
fn verify_ownership_forest(mir: &MirModule) -> Result<(), VerifyError> {
// 1. strong in-degree ≤ 1
verify_strong_indegree_constraint()?;
// 2. 強循環禁止(DAG構造)
verify_no_strong_cycles()?;
// 3. WeakLoad/WeakCheck決定的挙動
verify_weak_determinism()?;
}
Effect System検証
// 最適化安全性確認
fn verify_effect_system(mir: &MirModule) -> Result<(), VerifyError> {
// Pure命令の再順序化安全性
verify_pure_reordering_safety()?;
// Mut命令の依存関係保持
verify_mut_dependency_preservation()?;
// Io命令の順序保証
verify_io_order_preservation()?;
}
🎯 成功基準
必須基準
- 26命令完全実装: 全命令が仕様通り動作
- Effect System動作: 4種効果の正確な分類・最適化
- 所有権森検証: 強参照森・weak参照の安全性保証
- Golden MIRテスト: 全バックエンドでMIR一致
- 性能維持: 削減後も性能劣化なし
理想基準
- 最適化効果実証: pure再順序化・CSE/LICM動作確認
- 所有権森活用: Adopt/Releaseによる効率的メモリ管理
- JIT準備完了: TailCall/MemCopyの最適化基盤確立
📚 関連ドキュメント
- ChatGPT5仕様:
docs/予定/native-plan/copilot_issues_phase0_to_94.txt - 実装移行計画:
docs/予定/native-plan/issues/phase_8_5_mir_35_to_26_reduction.md - Effect System詳細:
docs/nyir/effect-system-specification.md
策定: ChatGPT5 + AI大会議
Gemini評価: 「極めて健全」「断行推奨」
実装目標: 2025年9月完了予定