Files
hakorune/docs/development/roadmap/phases/phase-12.5/debug-safety-comparison.md

160 lines
4.6 KiB
Markdown
Raw Normal View History

# DebugBox比較分析現在実装 vs ChatGPT5提案
## 📊 機能比較表
| カテゴリ | 現在のDebugBox | ChatGPT5提案 | 評価 |
|---------|--------------|------------|------|
| **基本追跡** | ✅ trackBox/watch | ✅ ハンドル表(id,gen,type,size) | 提案の方が詳細 |
| **メモリ分析** | ✅ memoryReport型別カウント | ✅ + allocサイト追跡 | 提案の方が深い |
| **リーク検出** | ❌ なし | ✅ 終了時ダンプ + CI失敗 | 提案が圧倒的 |
| **UAF検出** | ❌ なし | ✅ 世代カウンタ + カナリア | 提案が圧倒的 |
| **GC統合** | ❌ 独立動作 | ✅ gc=stress(k)モード | 提案が統合的 |
| **非同期対応** | ❌ なし | ✅ Safepoint可視化 | 提案が先進的 |
| **TaskGroup監査** | ❌ なし | ✅ LIFO順序保証 | 提案が構造化 |
| **パフォーマンス** | ⚠️ 常にオン | ✅ リリースで0コスト | 提案が実用的 |
## 🎯 現在のDebugBox機能
### 強み
1. **使いやすいAPI**
- trackBox/watch でシンプルに追跡
- dumpAll/memoryReport で情報取得
- saveToFile で永続化
2. **高レベル機能**
- ブレークポイント設定
- 関数呼び出しトレース
- コールスタック表示
### 弱点
1. **安全性検証なし**
- リーク検出機能なし
- Use-After-Free検出なし
- 世代管理なし
2. **GCとの分離**
- GCと独立して動作
- 統合的なメモリ分析不可
3. **性能影響**
- 常に有効(無効化機能なし)
- リリースビルドでもコスト発生
## 🚀 ChatGPT5提案の革新点
### 1. **リーク検出(最重要)**
```rust
// 終了時に自動実行
fn dump_leaks_at_exit() {
for (handle, info) in &HANDLE_TABLE {
if !info.freed {
eprintln!("LEAK: {} {} bytes at {:x}",
info.type_name, info.size, info.alloc_site);
}
}
if env::var("NYASH_FAIL_ON_LEAK").is_ok() {
process::exit(1); // CI失敗
}
}
```
### 2. **世代管理によるUAF検出**
```rust
struct HandleInfo {
id: u64,
generation: u32, // free時にインクリメント
freed: bool,
canary: u32, // 0xDEADBEEF
}
// アクセス時チェック
if handle.gen != info.generation || info.canary != 0xDEADBEEF {
panic!("Use-After-Free detected!");
}
```
### 3. **GCストレステスト**
```rust
// k回のalloc毎に強制GC
if ALLOC_COUNT % GC_STRESS_INTERVAL == 0 {
force_gc_collection();
}
```
### 4. **Safepoint可視化**
```rust
// MIR生成時に自動挿入
before_await() {
emit_trace("GC_Safepoint(await_enter)");
}
after_await() {
emit_trace("GC_Safepoint(await_exit)");
}
```
## 💡 統合提案DebugBox拡張
### Phase 1: 既存機能維持 + 安全性追加
```nyash
box DebugBox {
// 既存機能はそのまま
trackBox(box, name) { ... }
memoryReport() { ... }
// 新機能追加
enableLeakDetection() { ... }
setGCStressMode(interval) { ... }
dumpLeaks() { ... }
checkInvariants() { ... }
}
```
### Phase 2: StatsBox新設
```nyash
box StatsBox {
// 低レベル統計専用
leak_summary()
dump_alloc_sites(n)
snapshot()
diff(snapshot1, snapshot2)
watch_handle(handle)
}
```
### Phase 3: GCBox拡張
```nyash
box GCBox {
// GC制御
force_collect()
set_mode(mode) // "off", "sync", "stress"
get_stats()
set_stress_interval(k)
}
```
## 📈 実装優先順位
### 🔥 今すぐ実装すべきPhase 12.5.1
1. **リーク検出** - 終了時ダンプ + `NYASH_FAIL_ON_LEAK`
2. **世代管理** - Handleにgenerationフィールド追加
3. **GCストレスモード** - `gc=stress(k)`オプション
### 📅 次に実装Phase 12.5.2
1. **Allocサイト追跡** - 軽量版(ハッシュのみ)
2. **Safepoint可視化** - trace出力
3. **StatsBox** - 統計情報API
### 🌟 将来実装Phase 13以降
1. **TaskGroup監査** - 構造化並行性の完全保証
2. **Box監査フック** - invariantsチェック
3. **差分スナップショット** - 高度なプロファイリング
## 🎯 結論
ChatGPT5の提案は「**簡単ライフサイクル × 自己責任 × 見える化**」という哲学を完璧に体現している。現在のDebugBoxを拡張し、新たにStatsBox/GCBoxと連携することで、以下を実現
1. **開発時**: 徹底的な安全性チェック
2. **リリース時**: ゼロコスト(環境変数で制御)
3. **CI/CD**: 自動的な品質保証
「Everything is Box」を保ちながら、**死ぬほど安全**を実現する素晴らしい設計!