Files
hakorune/docs/ideas/other/2025-08-27-mir-roundtrip-optimization.md

141 lines
3.9 KiB
Markdown
Raw Normal View History

# MIRラウンドトリップ最適化 - 永続チューニング装置
作成日: 2025-08-27
Status: 構想段階
Priority: High
Related: ChatGPT5との共同構想
## 🎯 核心コンセプト
**nyash → MIR → VM → Cranelift → nyash再出力**
このループを回すことで、最適化の恩恵を全ルートに一括で波及させる「永続チューニング装置」を実現。
## 🏗️ ラウンドトリップの芯揺るがない3点
### 1. 唯一の真実MIR
- すべての最適化はMIR上に集約
- VM/Cranelift/WASM/LLVMはMIRの投影でしかない
- ルート固有の最適化は「MIRヒント属性」として逆流
### 2. MIRは常に正規形canonical
```
MIR → Canonicalizer → MIR*
```
- 順序・冗長・等価命令を正規化
- どのルートを通っても再度正規形に戻す
- 振動(最適化の行ったり来たり)を防ぐ
### 3. 再出力nyashは「意味等価の整形」
- MIR → nyash_printerで人が読めるnyashに戻す
- 目的は可読な再配布・差分レビューと最適化の可視化
- コメント/マクロは期待しない
## 💎 必須コンポーネント(超ミニマム)
### MIR Canonicalizer
- SSA再構築
- 冗長Phi削除
- `pure`のCSE
- `mut`の順序制約保持
- `io`は並べ替え禁止
### MIR Verifier
- 強1本・強循環禁止
- `weak`失効チェック
- `@gcable``fini`禁止
- 効果整合性
### nyash_printer
- public/privateフィールド再構成
- 関数、with/readガード、Sync<T>復元
- ソースマップMIR↔nyash保存
## 🚀 最適化の入口MIR上だけ
### ローカル最適化
- peephole, const-fold, copy-prop
- dead-branch, LICM(pure)
### 所有/弱参照最適化
- adopt/release短絡
- weak_loadのnull先行分岐
### Bus最適化
- elisionpure/read & 単一受信なら直呼び)
### 同期最適化
- `read`→共有ロック
- `write/io`→排他ロック
### プロファイル誘導
```
VM収集データ → MIR属性に反映
- op_count
- hot_bb
- bytes_copied
- send_count
```
## 🛡️ 無限最適化にしない「固定点」の作法
### 三段階で必ず終了
```
正規化 → 最適化 → 正規化
```
### 単調コスト
以下を悪化させたら採用しない/ロールバック:
- `instr_count(pure域)↓`
- `bytes_copied↓`
- `send_count↓`
- `alloc_freeバランス≥0`
### 等価性ガード
- I/Oログ完全一致
- fini順序一致@must_drop対象
### ハッシュ鍵
- MIR*の構造ハッシュを成果物キャッシュキーに
- 同形なら二度目以降はスキップ
## 📊 実行フロー(今日から回せる)
```bash
nyash --emit-mir src.ny > a.mir
mir --canonicalize a.mir > a*.mir
mir --optimize a*.mir > b.mir
vm --bc b.mir > b.bc
vm --run b.bc # 基準実行+プロファイル採取
jit --cranelift b.mir > code # JIT or AOT
mir --pretty b.mir > b.ny # 最適化後nyash出力
```
## ✅ CIに入れる「黄金テスト」
- **同値**: `interp == vm == cranelift`結果I/Oログ
- **GC等価**: `--gc=on/off`でログ差分0
- **資源確定**: `open==fini(@must_drop)`
- **ゼロコピー**: `dup()`以外で`bytes_copied == 0`
- **サイズ**: `send_count / alloc_count`が基準値以下
## 🎯 まず入れるべきパス(効果大きい順)
1. **Bus-elision**(安全条件つき)
2. **CSE/Copy-prop/Dead-branch**`pure`域)
3. **WeakLoad先読み**null fast-path
4. **Mutex/Rwロック折り畳み**(単一呼出シーケンス統合)
※これだけでVM/Cranelift/WASMの全部が速くなる
## 📝 直近ToDo
- [ ] mir canonicalizerPhi縮退/純粋域の順序固定)
- [ ] bus-elision安全条件実装
- [ ] profile schema定義
- [ ] cache key実装
- [ ] nyash_printer v0
---
*「どのルートを通っても、最後は同じMIRへ戻る」- 一箇所直せば全部に効く世界*