272 lines
8.2 KiB
Markdown
272 lines
8.2 KiB
Markdown
# 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週間)
|
||
|
||
---
|
||
|
||
## 📊 進捗状況
|
||
|
||
### 完了チェックリスト
|
||
|
||
**設計フェーズ** ✅
|
||
- [x] 実現可能性調査(Task 8)
|
||
- [x] アルゴリズム設計(Task 9)
|
||
- [x] 重複検出設計(Task 10)
|
||
- [x] Phase 32 計画作成
|
||
- [x] 構造改訂(selfhost/analyzer/ 配置確定)
|
||
|
||
**実装フェーズ** 🟡
|
||
- [ ] Day 1: スケルトン作成
|
||
- [ ] Day 2: MIR走査基盤
|
||
- [ ] Day 3: 呼び出しグラフ
|
||
- [ ] Day 4: BFS到達可能性
|
||
- [ ] Day 5: レポート生成
|
||
- [ ] Day 6: スモークテスト
|
||
- [ ] Day 7: セルフホスト解析
|
||
|
||
**検証フェーズ** ⏳
|
||
- [ ] 精度95%以上確認
|
||
- [ ] 処理速度5秒以内確認
|
||
- [ ] セルフホストコード実用化
|
||
|
||
---
|
||
|
||
## 🎓 学習リソース
|
||
|
||
### selfhost/shared から再利用
|
||
1. **BoxHelpers** - JSON解析パターン
|
||
2. **MirSchema** - MIR構造定義
|
||
3. **JsonEmit** - MapBox→JSON文字列変換
|
||
|
||
### Rustコードベース参考箇所
|
||
1. **src/mir/optimizer.rs** - デッドコード検出パターン
|
||
2. **src/mir/verification.rs** - Callee型のパース
|
||
3. **src/mir/builder/** - MIR構築パターン
|
||
|
||
### 既存Hakoruneコード
|
||
1. **apps/selfhost-compiler/builder/rewrite/known.hako** - continueの実例
|
||
2. **selfhost/shared/json/** - JSON処理パターン
|
||
3. **selfhost/hakorune-vm/** - MapBox/ArrayBox実践例
|
||
|
||
---
|
||
|
||
## 🚀 クイックスタート
|
||
|
||
### 今すぐ始める(Day 1)
|
||
|
||
```bash
|
||
# 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参照)
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 重要な設計判断
|
||
|
||
### ✅ 決定事項
|
||
1. **配置**: selfhost/analyzer/(Ring-1: Meta/自己ホスト) - apps/toolsではない
|
||
2. **責務分離**: driver/ast_scan/mir_scan/report - 単一Boxではない
|
||
3. **依存**: selfhost/shared のみ - 外部I/Oなし
|
||
4. **Gate-C/AST Strict**: 既定ON - 厳密型保証
|
||
5. **Fail-Fast**: フォールバック禁止 - Silent failure なし
|
||
6. **テスト先行**: ドキュメント→スモーク→実装
|
||
|
||
### ⚠️ 制約事項
|
||
1. **外部I/Oなし** - 入力は文字列/MapBoxのみ
|
||
2. **プラグイン化なし** - 当面VM経由のみ
|
||
3. **CLI化なし** - Phase 32では実装せず(将来tools/に追加可能)
|
||
|
||
---
|
||
|
||
## 📈 成功メトリクス
|
||
|
||
| メトリクス | 目標値 | 測定方法 |
|
||
|-----------|--------|------------|
|
||
| **精度** | >95% | セルフホストコード手動検証 |
|
||
| **再現率** | >90% | 既知デッドコード検出率 |
|
||
| **処理速度** | <5秒 | 1,000行ファイル解析 |
|
||
| **LOC** | ~1,230行 | 実装コード総量 |
|
||
| **テスト** | 3件以上 | スモークテスト(happy/happy/負例) |
|
||
|
||
---
|
||
|
||
## 🏆 期待される成果
|
||
|
||
### 技術的成果
|
||
1. 95%精度のデッドコード検出器
|
||
2. cargo-udepsの15倍精度(25% → 95%)
|
||
3. セルフホスト開発の加速
|
||
|
||
### 戦略的成果
|
||
1. 論文ネタ(PLDI SRC / ICSE Demo)
|
||
2. Everything is Box のショーケース
|
||
3. コミュニティ貢献
|
||
|
||
---
|
||
|
||
## 📞 サポート
|
||
|
||
### 質問・相談
|
||
- **設計相談**: `docs/development/proposals/` 参照
|
||
- **実装相談**: README.md のアーキテクチャセクション
|
||
- **バグ報告**: PLAN.md のリスク & 対策セクション
|
||
|
||
### 関連ドキュメント
|
||
- [Phase 32 README](./README.md) - 概要・アーキテクチャ(改訂版)
|
||
- [Phase 32 PLAN](./PLAN.md) - 7日間実装計画(改訂版)
|
||
- [MVPサマリー](../../development/proposals/analyzer-mvp-summary.md)
|
||
- [アルゴリズム設計](../../development/proposals/dead-code-detection/call-graph-algorithm-detailed-design.md)
|
||
- [実装ガイド](../../development/proposals/analyzer-implementation-guide.md)
|
||
|
||
---
|
||
|
||
**最終更新**: 2025-10-19(構造改訂版)
|
||
**次回レビュー**: 2025-10-20 (Day 1完了時)
|