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ロードマップ更新済み
4.6 KiB
4.6 KiB
DebugBox比較分析:現在実装 vs ChatGPT5提案
📊 機能比較表
| カテゴリ | 現在のDebugBox | ChatGPT5提案 | 評価 |
|---|---|---|---|
| 基本追跡 | ✅ trackBox/watch | ✅ ハンドル表(id,gen,type,size) | 提案の方が詳細 |
| メモリ分析 | ✅ memoryReport(型別カウント) | ✅ + allocサイト追跡 | 提案の方が深い |
| リーク検出 | ❌ なし | ✅ 終了時ダンプ + CI失敗 | 提案が圧倒的 |
| UAF検出 | ❌ なし | ✅ 世代カウンタ + カナリア | 提案が圧倒的 |
| GC統合 | ❌ 独立動作 | ✅ gc=stress(k)モード | 提案が統合的 |
| 非同期対応 | ❌ なし | ✅ Safepoint可視化 | 提案が先進的 |
| TaskGroup監査 | ❌ なし | ✅ LIFO順序保証 | 提案が構造化 |
| パフォーマンス | ⚠️ 常にオン | ✅ リリースで0コスト | 提案が実用的 |
🎯 現在のDebugBox機能
強み
-
使いやすいAPI
- trackBox/watch でシンプルに追跡
- dumpAll/memoryReport で情報取得
- saveToFile で永続化
-
高レベル機能
- ブレークポイント設定
- 関数呼び出しトレース
- コールスタック表示
弱点
-
安全性検証なし
- リーク検出機能なし
- Use-After-Free検出なし
- 世代管理なし
-
GCとの分離
- GCと独立して動作
- 統合的なメモリ分析不可
-
性能影響
- 常に有効(無効化機能なし)
- リリースビルドでもコスト発生
🚀 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)
- リーク検出 - 終了時ダンプ +
NYASH_FAIL_ON_LEAK - 世代管理 - Handleにgenerationフィールド追加
- GCストレスモード -
gc=stress(k)オプション
📅 次に実装(Phase 12.5.2)
- Allocサイト追跡 - 軽量版(ハッシュのみ)
- Safepoint可視化 - trace出力
- StatsBox - 統計情報API
🌟 将来実装(Phase 13以降)
- TaskGroup監査 - 構造化並行性の完全保証
- Box監査フック - invariantsチェック
- 差分スナップショット - 高度なプロファイリング
🎯 結論
ChatGPT5の提案は「簡単ライフサイクル × 自己責任 × 見える化」という哲学を完璧に体現している。現在のDebugBoxを拡張し、新たにStatsBox/GCBoxと連携することで、以下を実現:
- 開発時: 徹底的な安全性チェック
- リリース時: ゼロコスト(環境変数で制御)
- CI/CD: 自動的な品質保証
「Everything is Box」を保ちながら、死ぬほど安全を実現する素晴らしい設計!