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

4.6 KiB
Raw Blame 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. リーク検出(最重要)

// 終了時に自動実行
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検出

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ストレステスト

// k回のalloc毎に強制GC
if ALLOC_COUNT % GC_STRESS_INTERVAL == 0 {
    force_gc_collection();
}

4. Safepoint可視化

// MIR生成時に自動挿入
before_await() {
    emit_trace("GC_Safepoint(await_enter)");
}
after_await() {
    emit_trace("GC_Safepoint(await_exit)");
}

💡 統合提案DebugBox拡張

Phase 1: 既存機能維持 + 安全性追加

box DebugBox {
    // 既存機能はそのまま
    trackBox(box, name) { ... }
    memoryReport() { ... }
    
    // 新機能追加
    enableLeakDetection() { ... }
    setGCStressMode(interval) { ... }
    dumpLeaks() { ... }
    checkInvariants() { ... }
}

Phase 2: StatsBox新設

box StatsBox {
    // 低レベル統計専用
    leak_summary()
    dump_alloc_sites(n)
    snapshot()
    diff(snapshot1, snapshot2)
    watch_handle(handle)
}

Phase 3: GCBox拡張

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