Files
hakorune/docs/private/ideas/other/2025-08-27-gradual-implementation-stairway.md

128 lines
3.2 KiB
Markdown
Raw Normal View History

# 段階的実装の階段プラン - 壊れない設計
作成日: 2025-08-27
Status: 実装指針
Priority: High
Related: ChatGPT5との共同構想
## 🎯 設計哲学
**段階で積める設計=強い**し、破綻しにくい
各段階で必ず「合格証(ゲート)」を取ってから次へ進む。いつでも戻せる安全網付き。
## 🏗️ 階段プラン(壊さない順)
### 1. 凍結する契約(小さく)
```
固定する最小限の仕様:
- MIR1の命令表効果pure/read/write/io/atomic
- 強1本・weak非伝播・@must_drop/@gcableの検証規則
- VM-BC3アドレスの呼出規約
→ 1枚のmdに固定後は後方互換で拡張
```
### 2. 段階ゲート(各段の合格条件)
#### VM段階
- `interp==vm`(出力/I/Oログ一致
- `bytes_copied==0`(指定区間)
#### Cranelift v0段階
- `interp==vm==jit`一致
- CLIF verifier pass
#### GC(epoch)段階
- `--gc=on/off`でI/Oログ差分0
- @must_dropのみ監視
#### SyncBox v0段階
- `table.put()`で自動ロック
- `read/with`で借用
- Lintが違反を落とす
### 3. 最適化は「中立」をMIR1に集約
どのバックエンドにも効く系だけ先に:
- canonicalize / CSE / copy-prop / dead-branchpure域
- bus-elision安全条件下
- weak_load fast-path
### 4. 将来の二段化MIR2の入口だけ作る
```
準備だけ先行:
- MIR1→MIR2 loweringスケルトン例外なし・Box展開だけ
- MIR2のVerifierLOCKペア/アライン)だけ先に用意
→ 当面はCraneliftだけMIR2から食わせる
```
### 5. キルスイッチ/保険
```bash
# 怪しい時に戻せるスイッチを常備
--no-elide-bus # Bus最適化無効
--jit=off # JIT無効化
--gc=off|epoch # GC切替
--sync=warn-only # 同期チェックのみ
```
### 6. CIの黄金テスト毎回回す
#### 互換性
```
interp == vm == jit
```
#### 資源管理
```
open == fini(@must_drop)
```
#### 性能指標
```
- ゼロコピー: dup()以外で bytes_copied==0
- 退行防止: send_count/alloc_count が基準以下
```
### 7. メトリクスの見取り図
```
収集データ:
- op_count/hot_bbVMプロファイル→MIR属性に反映
- alloc/free・bytes_copied・send/recv
- p95/p99レイテンシfiniスパイク検知
```
### 8. 小さなデモを常に1本
```
http_static_zero_copy
- 機能HTTPサーバーでゼロコピー配信
- ゼロコピーbytes_copied==0の確認
- GC等価--gc=on/offで挙動一致
→ これが通れば次の段へ進む合図
```
## 💡 実装の心得
### 複雑さは増えても破綻しない理由
1. **凍結する契約**を小さく決める
2. **各段で合格証**を取る
3. **キルスイッチ**でいつでも戻せる
4. **黄金テスト**で退行を防ぐ
### 最適化の原則
- MIRに集約すれば全ルートに効く
- バックエンド固有は避ける
- 中立最適化を優先
## ✅ 直近の実装順序
1. **今日**: VM基盤の安定化
2. **明日**: Cranelift最小実装
3. **今週**: GC epochフック
4. **来週**: SyncBox MVP
5. **継続**: 黄金テストの拡充
---
*「壊れない設計」- 段階で積めば、複雑さは増えても破綻しない*