Files
hakorune/docs/development/current/main/phase84-index.md

291 lines
9.1 KiB
Markdown
Raw Normal View History

# Phase 84: PHI 型推論完全箱化プロジェクト — 完全ガイド
## 📚 ドキュメント索引
### Phase 84-3 完了報告(最新)
1. **[Phase 84-3 サマリー](phase84-3-summary.md)** ⭐ 最優先
- 削減実績: 9件 → 4件56%削減)
- PhiTypeResolver 実装成果
- Phase 84-4 への推奨
2. **[残り 4件の完全調査](phase84-3-remaining-4-analysis.md)**
- 各テストの詳細分析
- 失敗パターン分類
- なぜ PhiTypeResolver で解決できないか
3. **[Phase 84-4 実装推奨](phase84-4-implementation-recommendation.md)**
- BoxCall 型情報登録の実装方法
- dev フォールバック実装
- Await 型情報特殊処理
### Phase 84-2 記録(参考)
4. **[Case D 残り 9件の調査](phase84-2-case-d-investigation.md)**
- Phase 84-2 時点の分析
- GroupA/B/C 分類
- CopyTypePropagator 実装提案
5. **[Phase 84-2 詳細分析](phase84-case-d-detailed-analysis.md)**
- 12件 → 9件削減の詳細
- テスト別失敗パターン
### 初期調査(アーカイブ)
6. **[Case D インデックス](phase84-case-d-index.md)**
- Phase 84-1 の初期調査
- 12件の失敗パターン発見
## 🎯 Phase 84 の全体像
### 目標
**if_phi.rs レガシーフォールバックの完全削除**
- 初期状態: 12件の Case D 失敗
- 現在: 4件67%削減達成)
- 最終目標: 0件100%削減)
### 実装ロードマップ
```
Phase 82: フォールバック検出実装
↓ (Case D: 12件検出)
Phase 84-1: 初期調査・パターン分類
Phase 84-2: CopyTypePropagator 実装
↓ (12件 → 9件, 25%削減)
Phase 84-3: PhiTypeResolver 実装 ✅ 完了
↓ (9件 → 4件, 56%削減)
Phase 84-4: BoxCall/Await 型情報登録 ⏳ 次のステップ
↓ (4件 → 0件 目標)
Phase 84-5: if_phi.rs 完全削除
✨ 型推論システム完全箱化達成
```
## 📊 削減実績の詳細
### Phase 別削減内訳
| Phase | 実装内容 | 削減件数 | 残存件数 | 削減率 | 累積削減率 |
|-------|---------|---------|---------|--------|-----------|
| Phase 82 | 初期検出 | - | 12件 | - | - |
| Phase 84-2 | CopyTypePropagator | 3件 | 9件 | 25% | 25% |
| **Phase 84-3** | **PhiTypeResolver** | **5件** | **4件** | **56%** | **67%** |
| Phase 84-4 | BoxCall/Await 型登録 | 4件目標 | 0件目標 | 100% | 100% |
### パターン別解決状況
| パターン | 件数(初期) | Phase 84-2 後 | Phase 84-3 後 | Phase 84-4 目標 |
|---------|------------|--------------|--------------|----------------|
| GroupA: Loop 制御フロー | 7件 | 7件 | **0件** ✅ | 0件 |
| GroupB: Stage1Cli 複雑型推論 | 2件 | 2件 | 2件 | **0件** 🎯 |
| GroupC: await 特殊構文 | 1件 | 1件 | 1件 | **0件** 🎯 |
| GroupD: QMark 特殊構文 | 0件 | 0件 | 1件新規 | **0件** 🎯 |
| **合計** | **10件** | **10件** | **4件** | **0件** |
## 🔬 技術的成果
### Phase 84-3 で実装した箱
**PhiTypeResolver** (`src/mir/phi_core/phi_type_resolver.rs`)
**責務**: PHI + Copy グラフを辿って、安全に型を決められるときだけ MirType を返す
**アルゴリズム**:
1. DFS/BFS で root から探索開始
2. Copy → src へ進む
3. Phi → 各 incoming ValueId へ進む
4. それ以外Const/Call/BoxCall/NewBox...)は base 定義
5. base_types 集合を収集し、1 種類なら返す
**安全装置**:
- visited セットで同じ ValueId を 2 回以上辿らない(ループ防止)
- 探索上限で打ち切りmax_visits
### 箱理論の実現
```
[型生成レイヤー] - 型を作る
├─ emit_const()
├─ emit_box_call() ← Phase 84-4-B で型登録を追加
└─ build_await_expression() ← Phase 84-4-C で型登録を追加
[型伝播レイヤー] - 型を広げる
├─ CopyTypePropagator ← Phase 84-2
└─ PhiTypeResolver ← Phase 84-3 ✅
[統合レイヤー] - 全体を調整
└─ GenericTypeResolver
[レガシー] - 削除予定
└─ if_phi.rs フォールバック ← Phase 84-5 で削除
```
## 🎯 Phase 84-4 実装ガイド
### 推奨実装順序
#### ステップ1: dev フォールバック0.5日)
**目的**: 開発環境の即座のアンブロック
**実装**: `src/mir/builder/lifecycle.rs`
```rust
if should_enable_dev_fallback() {
if is_base_definition_with_missing_type(function, ret_val) {
return Ok(MirType::Unknown);
}
}
```
**環境変数**: `NYASH_PHI_DEV_FALLBACK=1`
#### ステップ2: BoxCall 型情報登録1-2日
**目的**: GroupB2件+ GroupD1件の根本解決
**実装**: `src/mir/builder/builder_calls.rs`
```rust
pub fn emit_box_call(...) -> Result<ValueId, String> {
let dst = self.next_value_id();
self.emit_instruction(MirInstruction::BoxCall { ... })?;
// 新機能: 戻り値型を推論して登録
if let Some(ret_ty) = self.infer_boxcall_return_type(box_val, method, &args) {
self.value_types.insert(dst, ret_ty);
}
Ok(dst)
}
```
#### ステップ3: Await 型情報特殊処理0.5日)
**目的**: GroupC1件の暫定解決
**実装**: `src/mir/builder/stmts.rs`
```rust
pub(super) fn build_await_expression(...) -> Result<ValueId, String> {
let result_id = self.next_value_id();
// 新機能: Unknown として型登録
self.value_types.insert(result_id, MirType::Unknown);
self.emit_instruction(MirInstruction::Await { ... })?;
Ok(result_id)
}
```
### 検証方法
```bash
# ステップ1 完了確認
NYASH_PHI_DEV_FALLBACK=1 NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D"
# 期待: 出力なし
# ステップ2 完了確認
NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 1await のみ)
# ステップ3 完了確認
NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 0全件解決
```
## 📝 関連ファイル
### 実装ファイル
- `src/mir/phi_core/phi_type_resolver.rs` - Phase 84-3 実装
- `src/mir/phi_core/copy_type_propagator.rs` - Phase 84-2 実装
- `src/mir/join_ir/lowering/generic_type_resolver.rs` - 統合調整
- `src/mir/builder/lifecycle.rs` - 型推論エントリーポイント
- `src/mir/join_ir/lowering/if_phi.rs` - 削除予定レガシー
### Phase 84-4 で修正するファイル
- `src/mir/builder/lifecycle.rs` - dev フォールバック追加
- `src/mir/builder/builder_calls.rs` - BoxCall 型登録追加
- `src/mir/builder/stmts.rs` - Await 型登録追加
## 🚀 次のアクション
### 優先度1: Phase 84-4-A 実装(即実装推奨)
**目的**: 開発環境の即座のアンブロック
**実装時間**: 0.5日
**参考**: [Phase 84-4 実装推奨](phase84-4-implementation-recommendation.md#phase-84-4-a-dev-フォールバック推奨-即実装)
### 優先度2: Phase 84-4-B 実装(根本解決)
**目的**: BoxCall 型情報の完全追跡
**実装時間**: 1-2日
**参考**: [Phase 84-4 実装推奨](phase84-4-implementation-recommendation.md#phase-84-4-b-boxcall-型情報登録推奨-根本解決)
### 優先度3: Phase 84-4-C 実装(完全解決)
**目的**: Await 型情報の暫定対応
**実装時間**: 0.5日
**参考**: [Phase 84-4 実装推奨](phase84-4-implementation-recommendation.md#phase-84-4-c-await-型情報特殊処理推奨-暫定対応)
### Phase 84-5: if_phi.rs 削除(最終ゴール)
**前提条件**: Phase 84-4 完了Case D = 0件
**実装内容**:
1. `src/mir/join_ir/lowering/if_phi.rs` 完全削除(約 300行
2. `GenericTypeResolver` の if_phi 呼び出し削除
3. `lifecycle.rs` の Case D 処理を全て削除
4. ドキュメント更新: Phase 82-84 完了宣言
## 📈 進捗追跡
### 現在の状態
- ✅ Phase 82: フォールバック検出実装
- ✅ Phase 84-1: 初期調査・パターン分類
- ✅ Phase 84-2: CopyTypePropagator 実装25%削減)
- ✅ Phase 84-3: PhiTypeResolver 実装56%削減)
- ⏳ Phase 84-4: BoxCall/Await 型情報登録(次のステップ)
- 🎯 Phase 84-5: if_phi.rs 完全削除(最終ゴール)
### 削減進捗
```
12件 ████████████ 100%
▼ Phase 84-2 (-25%)
9件 █████████ 75%
▼ Phase 84-3 (-44%)
4件 ████ 33%
▼ Phase 84-4 (-33% 目標)
0件 0% ✨ 完全達成
```
## 🎉 まとめ
**Phase 84-3 の偉業**:
- ✅ PhiTypeResolver 実装完了
- ✅ 56%削減達成9件 → 4件
- ✅ GroupALoop 制御フロー)完全解決
- ✅ 箱理論に基づく型推論システムの明確化
**Phase 84-4 への期待**:
- 🎯 BoxCall/Await 型情報登録による根本解決
- 🎯 残り 4件の完全解決67% → 100%
- 🎯 if_phi.rs レガシー削除準備完了
**Phase 84 プロジェクトの意義**:
- 🎯 型推論システムの完全箱化
- 🎯 レガシーフォールバック根絶
- 🎯 保守性・拡張性・パフォーマンスの飛躍的向上
**次のステップ**: [Phase 84-4 実装推奨](phase84-4-implementation-recommendation.md)を参照して実装開始!