# 段階的実装の階段プラン - 壊れない設計 作成日: 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. **継続**: 黄金テストの拡充 --- *「壊れない設計」- 段階で積めば、複雑さは増えても破綻しない*