Files
hakorune/docs/development/roadmap/phases/phase-12.5/debug-safety-comparison.md
Moe Charm da96bcb906 📚 Phase 12.5 最適化戦略 & Phase 15 セルフホスティング計画
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ロードマップ更新済み
2025-09-02 05:11:10 +09:00

160 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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」を保ちながら、**死ぬほど安全**を実現する素晴らしい設計!