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

319 lines
6.9 KiB
Markdown
Raw Normal View 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** - 定数値生成
```rust
Const { dst: ValueId, value: ConstValue }
```
- 用途: 即値(整数/文字列/nullの生成
- 例: `const r1 = 42`
#### 2. **UnaryOp** - 単項演算
```rust
UnaryOp { dst: ValueId, op: UnaryOperator, operand: ValueId }
```
- 演算子: `not`, `-` (負数)
- 例: `r2 = not r1`
#### 3. **BinOp** - 二項演算
```rust
BinOp { dst: ValueId, op: BinaryOperator, left: ValueId, right: ValueId }
```
- 演算子: `+`, `-`, `*`, `/`, `%`, `&`, `|`, `^`, `<<`, `>>`
- 例: `r3 = r1 + r2`
#### 4. **Compare** - 比較演算
```rust
Compare { dst: ValueId, op: CompareOp, left: ValueId, right: ValueId }
```
- 演算子: `==`, `!=`, `<`, `<=`, `>`, `>=`
- 例: `r4 = r1 < r2`
#### 5. **TypeOp** - 型操作
```rust
TypeOp { dst: ValueId, op: TypeOperator, operand: ValueId, type_info: Option<TypeInfo> }
```
- 操作: `typeof`, `cast`, `is_a`
- 例: `r5 = typeof r1`
---
### **メモリ操作2命令**
#### 6. **Load** - メモリ読み込み
```rust
Load { dst: ValueId, source: ValueId, field: Option<String> }
```
- 用途: 変数読み込み、フィールドアクセス
- 例: `r6 = load r1.name`
#### 7. **Store** - メモリ書き込み
```rust
Store { target: ValueId, field: Option<String>, value: ValueId }
```
- 用途: 変数代入、フィールド更新
- 例: `store r1.name = r2`
---
### **制御フロー4命令**
#### 8. **Branch** - 条件分岐
```rust
Branch { condition: ValueId, true_target: BlockId, false_target: BlockId }
```
- 用途: if文、条件式
- 例: `branch r1 -> B2, B3`
#### 9. **Jump** - 無条件ジャンプ
```rust
Jump { target: BlockId }
```
- 用途: ループ継続、合流
- 例: `jump B1`
#### 10. **Return** - 関数リターン
```rust
Return { value: Option<ValueId> }
```
- 用途: 関数終了、値返却
- 例: `return r1`
#### 11. **Phi** - SSA合流ード
```rust
Phi { dst: ValueId, incoming: Vec<(BlockId, ValueId)> }
```
- 用途: 制御フロー合流点での値統合
- 例: `r7 = phi [B1: r1, B2: r2]`
- **Phase 15**: PHI-on標準化LoopForm実装
---
### **Box操作2命令**
#### 12. **NewBox** - Box生成
```rust
NewBox { dst: ValueId, box_name: String, args: Vec<ValueId> }
```
- 用途: Box インスタンス生成
- 例: `r8 = newbox StringBox("hello")`
- **Note**: 生成後に自動的に `birth()` を呼び出し
#### 13. **BoxCall** - Boxメソッド呼び出し
```rust
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** - 外部関数呼び出し
```rust
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化**
```rust
LoopForm {
header: BlockId, // ループヘッダー
body: BlockId, // ループ本体
exit: BlockId, // ループ出口
condition: ValueId, // ループ条件
phis: Vec<Phi>, // PHIード自動生成
}
```
**特徴**:
- 制御構造もBox化Everything is Box完成
- PHI自動生成
- break/continue自動処理
**例**:
```nyash
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型 - 型安全な関数呼び出し**
```rust
enum Callee {
Global(String), // グローバル関数
Method {
box_name: String,
method: String,
receiver: ValueId
},
Value(ValueId), // 第一級関数
Extern(String), // C ABI統合
}
```
**特徴**:
- コンパイル時型解決
- シャドウイング問題解決
- VM/LLVM両対応
**例**:
```nyash
print("hello") // Callee::Extern("print")
obj.method() // Callee::Method { box_name: "Obj", ... }
```
---
### 3. **演算子Box統一**
```rust
// 演算も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対応 ✅
---
## 📚 関連ドキュメント
- [INSTRUCTION_SET.md](../../../../reference/mir/INSTRUCTION_SET.md): 命令詳細
- [PHI Policy](../../../../reference/mir/phi_policy.md): PHI設計方針
- [LoopForm Design](../../../../reference/architecture/loopform-design.md): LoopForm詳細
- [Callee Revolution](../../../../development/architecture/mir-callee-revolution.md): Callee型設計
---
## 🎉 結論
**MIR14は、Everything is Box哲学の完全実装により、たった14命令で全実行形態をサポートする革新的IR です。**
世界初の成果:
- ✅ データ/演算/制御すべてBox化
- ✅ 14命令で完全実装
- ✅ VM/LLVM両対応
- ✅ 型安全な関数呼び出し
**これが、Nyash言語の実行基盤です。** ✨