8.2 KiB
8.2 KiB
Phase 32 INDEX - Hakorune Static Analyzer MVP
Phase番号: 32 名称: Hakorune Static Analyzer - Dead Code Detector MVP 状態: 🟡 計画完了、実装準備中(構造改訂版) 期間: 2025-10-20 → 2025-10-27 (7日間) 優先度: HIGH ⭐⭐⭐⭐⭐ Ring位置: Ring-1(Meta/自己ホスト)
📚 ドキュメント構成
| ファイル | 説明 | 状態 |
|---|---|---|
| README.md | Phase概要・目標・アーキテクチャ(改訂版) | ✅ 完成 |
| PLAN.md | 7日間詳細実装計画(改訂版) | ✅ 完成 |
| INDEX.md | このファイル(ナビゲーション) | ✅ 完成 |
🎯 Phase 32 概要
目標
HakoruneでHakoruneコードを解析する静的解析ツール(デッドコード検出器)の実装
スコープ
- ✅ MIR JSONからデッドコード検出
- ✅ Gate-C/AST Strict MIR前提の厳密解析
- ✅ テキストレポート出力(診断サマリ)
- ✅ 95%以上の精度目標
非スコープ(Phase 33以降)
- ❌ 重複コード検出(Phase 33)
- ❌ 複雑度メトリクス(Phase 34)
- ❌ マルチファイル解析(Phase 35)
- ❌ JSON/DOT出力(Phase 36)
📋 実装計画サマリー
| Day | タスク | 成果物 | LOC |
|---|---|---|---|
| 1 | スケルトン作成 | driver/ast_scan/mir_scan/report + README | 180 |
| 2 | MIR走査基盤 | mir_scan_box.hako(関数抽出) | 150 |
| 3 | 呼び出しグラフ構築 | mir_scan_box.hako拡張(Graph) | 250 |
| 4 | BFS到達可能性 | mir_scan_box.hako完成 | 300 |
| 5 | レポート生成 | report_box.hako完成 | 120 |
| 6 | スモークテスト整備 | 3本(happy/happy/負例) | 180 |
| 7 | セルフホスト解析 | ドキュメント + 実用化 | 50 |
| Total | 1,230 |
🏗️ 成果物の場所
実装ファイル(改訂版)
selfhost/analyzer/
├── hako_module.toml # exports 最小(selfhost.analyzer.*)
├── boxes/
│ ├── driver_box.hako # 入口: 入力→走査→レポート
│ ├── ast_scan_box.hako # AST Strict前提の走査
│ ├── mir_scan_box.hako # Gate-C Strict MIR JSONの走査
│ └── report_box.hako # 集計と文字列整形、出力
├── README.md # 責務/入出力/ENV/非対象
└── smokes/
├── analyzer_ast_strict_ok_vm.sh
├── analyzer_mir_gatec_ok_vm.sh
└── analyzer_bad_mir_fail_vm.sh # 負例・診断固定
ドキュメント
docs/private/roadmap/phases/phase-32/
├── README.md # 本Phase概要(改訂版)
├── PLAN.md # 実装計画(改訂版)
└── INDEX.md # このファイル
設計ドキュメント(既存)
docs/development/proposals/
├── analyzer-mvp-summary.md # MVPサマリー
├── hakorune-static-analyzer-feasibility.md # 実現可能性調査
├── analyzer-implementation-guide.md # 実装ガイド(SSOT要約をselfhost/analyzer/README.mdに)
└── dead-code-detection/
├── call-graph-algorithm-detailed-design.md
└── call-graph-visualization.md
🔗 関連Phase
前提Phase
- Phase 12.7: continue実装 ✅
- Phase 15: Everything is Box ✅
- Phase 20: Hakorune VM実装 ✅
- Phase 31: Gate-C/AST Strict確立 ✅
後続Phase(予定)
- Phase 33: 重複コード検出(1週間)
- Phase 34: 複雑度メトリクス(1週間)
- Phase 35: マルチファイル解析(2週間)
- Phase 36: 可視化・出力(2週間)
📊 進捗状況
完了チェックリスト
設計フェーズ ✅
- 実現可能性調査(Task 8)
- アルゴリズム設計(Task 9)
- 重複検出設計(Task 10)
- Phase 32 計画作成
- 構造改訂(selfhost/analyzer/ 配置確定)
実装フェーズ 🟡
- Day 1: スケルトン作成
- Day 2: MIR走査基盤
- Day 3: 呼び出しグラフ
- Day 4: BFS到達可能性
- Day 5: レポート生成
- Day 6: スモークテスト
- Day 7: セルフホスト解析
検証フェーズ ⏳
- 精度95%以上確認
- 処理速度5秒以内確認
- セルフホストコード実用化
🎓 学習リソース
selfhost/shared から再利用
- BoxHelpers - JSON解析パターン
- MirSchema - MIR構造定義
- JsonEmit - MapBox→JSON文字列変換
Rustコードベース参考箇所
- src/mir/optimizer.rs - デッドコード検出パターン
- src/mir/verification.rs - Callee型のパース
- src/mir/builder/ - MIR構築パターン
既存Hakoruneコード
- apps/selfhost-compiler/builder/rewrite/known.hako - continueの実例
- selfhost/shared/json/ - JSON処理パターン
- selfhost/hakorune-vm/ - MapBox/ArrayBox実践例
🚀 クイックスタート
今すぐ始める(Day 1)
# 1. ディレクトリ作成
mkdir -p selfhost/analyzer/{boxes,smokes}
# 2. hako_module.toml作成
cat > selfhost/analyzer/hako_module.toml << 'EOF'
[package]
name = "selfhost.analyzer"
version = "0.1.0"
[exports]
driver = "boxes/driver_box.hako"
ast_scan = "boxes/ast_scan_box.hako"
mir_scan = "boxes/mir_scan_box.hako"
report = "boxes/report_box.hako"
[dependencies]
BoxHelpers = "selfhost.shared.box_helpers"
MirSchema = "selfhost.shared.mir.schema"
JsonEmit = "selfhost.shared.json.emit"
EOF
# 3. DriverBox スケルトン作成
cat > selfhost/analyzer/boxes/driver_box.hako << 'EOF'
using selfhost.analyzer.mir_scan as MirScanBox
using selfhost.analyzer.report as ReportBox
static box DriverBox {
birth() {
# 空のbirth
}
run_from_string(input, kind) {
return "[DriverBox] Not implemented yet"
}
run_from_box(input, kind) {
local result
result = new MapBox()
return result
}
}
EOF
# 4. 残りのBoxスケルトンも同様に作成
# (PLAN.md Day 1参照)
💡 重要な設計判断
✅ 決定事項
- 配置: selfhost/analyzer/(Ring-1: Meta/自己ホスト) - apps/toolsではない
- 責務分離: driver/ast_scan/mir_scan/report - 単一Boxではない
- 依存: selfhost/shared のみ - 外部I/Oなし
- Gate-C/AST Strict: 既定ON - 厳密型保証
- Fail-Fast: フォールバック禁止 - Silent failure なし
- テスト先行: ドキュメント→スモーク→実装
⚠️ 制約事項
- 外部I/Oなし - 入力は文字列/MapBoxのみ
- プラグイン化なし - 当面VM経由のみ
- CLI化なし - Phase 32では実装せず(将来tools/に追加可能)
📈 成功メトリクス
| メトリクス | 目標値 | 測定方法 |
|---|---|---|
| 精度 | >95% | セルフホストコード手動検証 |
| 再現率 | >90% | 既知デッドコード検出率 |
| 処理速度 | <5秒 | 1,000行ファイル解析 |
| LOC | ~1,230行 | 実装コード総量 |
| テスト | 3件以上 | スモークテスト(happy/happy/負例) |
🏆 期待される成果
技術的成果
- 95%精度のデッドコード検出器
- cargo-udepsの15倍精度(25% → 95%)
- セルフホスト開発の加速
戦略的成果
- 論文ネタ(PLDI SRC / ICSE Demo)
- Everything is Box のショーケース
- コミュニティ貢献
📞 サポート
質問・相談
- 設計相談:
docs/development/proposals/参照 - 実装相談: README.md のアーキテクチャセクション
- バグ報告: PLAN.md のリスク & 対策セクション
関連ドキュメント
- Phase 32 README - 概要・アーキテクチャ(改訂版)
- Phase 32 PLAN - 7日間実装計画(改訂版)
- MVPサマリー
- アルゴリズム設計
- 実装ガイド
最終更新: 2025-10-19(構造改訂版) 次回レビュー: 2025-10-20 (Day 1完了時)