Files
hakorune/docs/archive/mir-26-specification.md

9.5 KiB
Raw Blame History

🤖 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に統合

  • UnaryOpBinOpnot %a → %a xor true

BoxField操作に統合

  • Load/StoreBoxFieldLoad/BoxFieldStore
  • ArrayGet/ArraySetBoxFieldLoad/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/BarrierWriteAtomicFence統合
  • FutureNew/FutureSet/AwaitNewBox + 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月完了予定