Files
hakorune/docs/private/research/papers-active/mir14-universal-execution/MIR14_SPEC.md

6.9 KiB
Raw Blame History

MIR14命令セット仕様

Version: Phase 15.0 Last Updated: 2025-09-27

📚 概要

MIR14Middle-level Intermediate Representation 14は、Nyash言語のコア中間表現です。たった14命令で、Interpreter/VM/LLVM/JITすべての実行形態をサポートします。

設計哲学

Everything is Box
    ↓
Box化により命令を最小化
    ↓
14命令で完全実装 ✨

🎯 MIR14命令一覧

基本演算5命令

1. Const - 定数値生成

Const { dst: ValueId, value: ConstValue }
  • 用途: 即値(整数/文字列/nullの生成
  • 例: const r1 = 42

2. UnaryOp - 単項演算

UnaryOp { dst: ValueId, op: UnaryOperator, operand: ValueId }
  • 演算子: not, - (負数)
  • 例: r2 = not r1

3. BinOp - 二項演算

BinOp { dst: ValueId, op: BinaryOperator, left: ValueId, right: ValueId }
  • 演算子: +, -, *, /, %, &, |, ^, <<, >>
  • 例: r3 = r1 + r2

4. Compare - 比較演算

Compare { dst: ValueId, op: CompareOp, left: ValueId, right: ValueId }
  • 演算子: ==, !=, <, <=, >, >=
  • 例: r4 = r1 < r2

5. TypeOp - 型操作

TypeOp { dst: ValueId, op: TypeOperator, operand: ValueId, type_info: Option<TypeInfo> }
  • 操作: typeof, cast, is_a
  • 例: r5 = typeof r1

メモリ操作2命令

6. Load - メモリ読み込み

Load { dst: ValueId, source: ValueId, field: Option<String> }
  • 用途: 変数読み込み、フィールドアクセス
  • 例: r6 = load r1.name

7. Store - メモリ書き込み

Store { target: ValueId, field: Option<String>, value: ValueId }
  • 用途: 変数代入、フィールド更新
  • 例: store r1.name = r2

制御フロー4命令

8. Branch - 条件分岐

Branch { condition: ValueId, true_target: BlockId, false_target: BlockId }
  • 用途: if文、条件式
  • 例: branch r1 -> B2, B3

9. Jump - 無条件ジャンプ

Jump { target: BlockId }
  • 用途: ループ継続、合流
  • 例: jump B1

10. Return - 関数リターン

Return { value: Option<ValueId> }
  • 用途: 関数終了、値返却
  • 例: return r1

11. Phi - SSA合流ード

Phi { dst: ValueId, incoming: Vec<(BlockId, ValueId)> }
  • 用途: 制御フロー合流点での値統合
  • 例: r7 = phi [B1: r1, B2: r2]
  • Phase 15: PHI-on標準化LoopForm実装

Box操作2命令

12. NewBox - Box生成

NewBox { dst: ValueId, box_name: String, args: Vec<ValueId> }
  • 用途: Box インスタンス生成
  • 例: r8 = newbox StringBox("hello")
  • Note: 生成後に自動的に birth() を呼び出し

13. BoxCall - Boxメソッド呼び出し

BoxCall {
    dst: Option<ValueId>,
    receiver: ValueId,
    method: String,
    args: Vec<ValueId>,
    callee: Option<Callee>  // Phase 15追加
}
  • 用途: メソッド呼び出し、演算子Box
  • 例: r9 = boxcall r8.length()
  • Phase 15新機能: Callee型による型安全化

外部連携1命令

14. ExternCall - 外部関数呼び出し

ExternCall {
    dst: Option<ValueId>,
    function: String,
    args: Vec<ValueId>
}
  • 用途: C ABI関数、ランタイム関数
  • 例: externcall print(r1)
  • 最小5関数: print, error, panic, exit, now

🌟 Phase 15新機能

1. LoopForm - 制御構造のBox化

LoopForm {
    header: BlockId,      // ループヘッダー
    body: BlockId,        // ループ本体
    exit: BlockId,        // ループ出口
    condition: ValueId,   // ループ条件
    phis: Vec<Phi>,      // PHIード自動生成
}

特徴:

  • 制御構造もBox化Everything is Box完成
  • PHI自動生成
  • break/continue自動処理

:

loop(i < 10) {
    print(i)
    i = i + 1
}

MIR生成:

LoopForm {
    header: B1,
    body: B2,
    exit: B3,
    phis: [phi_i: [B0: 0, B2: i+1]]
}

2. Callee型 - 型安全な関数呼び出し

enum Callee {
    Global(String),                       // グローバル関数
    Method {
        box_name: String,
        method: String,
        receiver: ValueId
    },
    Value(ValueId),                       // 第一級関数
    Extern(String),                       // C ABI統合
}

特徴:

  • コンパイル時型解決
  • シャドウイング問題解決
  • VM/LLVM両対応

:

print("hello")  // Callee::Extern("print")
obj.method()    // Callee::Method { box_name: "Obj", ... }

3. 演算子Box統一

// 演算もBoxCallに統一
BinOp { op: Add, left: r1, right: r2 }
    
BoxCall {
    receiver: AddOperator,
    method: "apply",
    args: [r1, r2],
    callee: Callee::Method { ... }
}

特徴:

  • observe/adopt段階的移行
  • デバッグ可視化Void混入即座特定
  • Everything is Boxの完全実現

📊 命令数の進化

Phase 1:  27命令汎用的
    ↓ Box哲学による削減
Phase 2:  13命令Core-13
    ↓ 算術演算の追加
Phase 3:  14命令MIR14
    ↓ PHI-on標準化
Phase 15: 14命令 + LoopForm + Callee型

🎯 Everything is Boxの完全実現

データBox

StringBox, IntegerBox, ArrayBox, MapBox...

演算子Box(世界初!)

AddOperator, CompareOperator, UnaryOperator...

制御Box(世界初!)

LoopForm: 制御構造もBox化

結論: すべてがBoxである → 14命令で完全実装可能


🚀 実装状況

Rust VM (開発・デバッグ・検証用)

  • 実装: 712行
  • MIR14完全対応
  • Callee型実装済み
  • gdb/lldbデバッグ可能

LLVM (本番・最適化・配布用)

  • 実装: Python/llvmlite
  • MIR14完全対応
  • PHI最適化
  • ネイティブEXE生成

PyVM JSON v0ブリッジ専用

  • 実装: 1074行
  • セルフホスティング・using処理専用
  • MIR14対応

📚 関連ドキュメント


🎉 結論

MIR14は、Everything is Box哲学の完全実装により、たった14命令で全実行形態をサポートする革新的IR です。

世界初の成果:

  • データ/演算/制御すべてBox化
  • 14命令で完全実装
  • VM/LLVM両対応
  • 型安全な関数呼び出し

これが、Nyash言語の実行基盤です。