Files
hakorune/docs/説明書/mir-26-specification.md
Moe Charm 3df87fb1ce fix(phase-4.3c-3): Fix StringBox literal handling in MIR builder
Phase 4-3c-3 Complete: WASM host functions now correctly output string content

## Changes:
- Fixed MIR builder to handle StringBox with string literal arguments
- Special case for  to generate proper string constants
- Removed debug output after successful verification
- WASM now correctly outputs "Hello MIR!" instead of "StringBox"

## Test Results:
- MIR generation:  Generates  correctly
- WASM compilation:  String data correctly placed at offset 4096
- WASM execution:  Outputs "Hello MIR\!" as expected

## Technical Details:
- Modified build_new_expression() to detect StringBox with literal arguments
- Generates Const instruction with actual string content
- Host function reads StringBox memory layout correctly

This completes the WASM string output functionality for Phase 4.

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 13:49:35 +09:00

262 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🤖 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)**
```rust
// 基本原則: strong in-degree ≤ 1
%parent = NewBox "Parent"()
%child = NewBox "Child"()
Adopt %parent <- %child // 子を親の強所有に移管
```
#### **検証ルール**
-**DAG構造保証**: 強参照による循環禁止
-**単一所有**: 各Boxは最大1つの強参照のみ
-**所有移管**: Adopt/Releaseによる安全な移転
### **weak参照システム**
```rust
%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/BoxFieldStore`
- `ArrayGet/ArraySet``BoxFieldLoad/BoxFieldStore`配列もBoxのフィールド
#### **intrinsic化**
```rust
// 削除前
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 テスト**
```bash
# 全バックエンドでMIR出力一致確認
./target/release/nyash --dump-mir-26 program.nyash > golden.mir
./target/release/nyash --backend vm --dump-mir-26 program.nyash > vm.mir
./target/release/nyash --backend wasm --dump-mir-26 program.nyash > wasm.mir
diff golden.mir vm.mir && diff vm.mir wasm.mir
```
### **所有権森検証**
```rust
// 検証項目
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検証**
```rust
// 最適化安全性確認
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月完了予定