128 lines
3.2 KiB
Markdown
128 lines
3.2 KiB
Markdown
# 段階的実装の階段プラン - 壊れない設計
|
||
|
||
作成日: 2025-08-27
|
||
Status: 実装指針
|
||
Priority: High
|
||
Related: ChatGPT5との共同構想
|
||
|
||
## 🎯 設計哲学
|
||
|
||
**段階で積める設計=強い**し、破綻しにくい
|
||
|
||
各段階で必ず「合格証(ゲート)」を取ってから次へ進む。いつでも戻せる安全網付き。
|
||
|
||
## 🏗️ 階段プラン(壊さない順)
|
||
|
||
### 1. 凍結する契約(小さく)
|
||
```
|
||
固定する最小限の仕様:
|
||
- MIR1の命令表+効果(pure/read/write/io/atomic)
|
||
- 強1本・weak非伝播・@must_drop/@gcableの検証規則
|
||
- VM-BC(3アドレス)の呼出規約
|
||
|
||
→ 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-branch(pure域)
|
||
- bus-elision(安全条件下)
|
||
- weak_load fast-path
|
||
|
||
### 4. 将来の二段化(MIR2)の入口だけ作る
|
||
```
|
||
準備だけ先行:
|
||
- MIR1→MIR2 loweringスケルトン(例外なし・Box展開だけ)
|
||
- MIR2のVerifier(LOCKペア/アライン)だけ先に用意
|
||
→ 当面は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_bb(VMプロファイル→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. **継続**: 黄金テストの拡充
|
||
|
||
---
|
||
|
||
*「壊れない設計」- 段階で積めば、複雑さは増えても破綻しない* |