Phase 12.5: MIR15最適化戦略 - コンパイラ丸投げ作戦 - optimization-strategy.txt: 詳細戦略(MIR側は軽量、コンパイラに丸投げ) - implementation-examples.md: 具体的な実装例 - debug-safety-comparison.md: 現在のDebugBox vs ChatGPT5提案の比較分析 Phase 15: Nyashセルフホスティング - 究極の目標 - self-hosting-plan.txt: 内蔵Craneliftによる実現計画 - technical-details.md: CompilerBox設計とブートストラップ手順 - README.md: セルフホスティングのビジョン 重要な知見: - LLVM統合完了済み(Phase 11)だが依存が重すぎる - Craneliftが現実的な選択肢(3-5MB vs LLVM 50-100MB) - 「コンパイラもBox、すべてがBox」の夢へ MASTERロードマップ更新済み
160 lines
4.6 KiB
Markdown
160 lines
4.6 KiB
Markdown
# 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」を保ちながら、**死ぬほど安全**を実現する素晴らしい設計! |