docs(phase84): Add Phase 84-3 analysis and Phase 84-4 recommendations

Task agent investigation results after Phase 84-3 completion.

Remaining 4 Case D analysis:
- test_lowering_await_expression: await construct
- mir_lowering_of_qmark_propagate: QMark (?) construct
- mir_stage1_cli_emit_program_min_*: Stage1Cli type inference (2 tests)

Root cause (unified): BoxCall/Await/QMark return types not registered in value_types

Phase 84-4 implementation recommendations:
- Phase 84-4-A: dev fallback (0.5 days) - immediate unblock
- Phase 84-4-B: BoxCall type registration (1-2 days) - solves 3 cases
- Phase 84-4-C: Await type special handling (0.5 days) - solves 1 case

Documents added:
- phase84-3-summary.md: Reduction results and Phase 84-4 recommendations
- phase84-3-remaining-4-analysis.md: Detailed analysis of each test
- phase84-4-implementation-recommendation.md: Implementation guide with code examples
- phase84-index.md: Phase 84 overall index and roadmap
- phase84-3-final-report.md: Complete report with executive summary

Cumulative results:
- Phase 82: 12 cases
- Phase 84-2: 9 cases (25% reduction)
- Phase 84-3: 4 cases (56% reduction)
- Total: 67% reduction achieved (12 → 4)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-02 20:18:13 +09:00
parent c89f08fc52
commit c5abf62350
6 changed files with 1758 additions and 13 deletions

View File

@ -2,22 +2,23 @@
## TL;DR
**現状**: 9 件の Case D 失敗Phase 83 + Phase 84-1 + Phase 84-2 実装後)
**現状**: 4 件の Case D 失敗Phase 83 + Phase 84-1 + Phase 84-2 + Phase 84-3 実装後)
**主要原因**: PHI 経由の複雑な edge パターンawait/try-catch、多段 PHI チェーンなど)
**主要原因**: BoxCall/Await/QMark の戻り値型が `value_types` に未登録なため、PHI/Copy グラフの「base 型」が欠落していること。
**対応状況**:
- Phase 83: MethodReturnHintBoxP3-D実装で 20 件 → 15 件
- Phase 84-1: Const 命令型アノテーション追加で 15 件 → 12 件
- Phase 84-2: CopyTypePropagator 導入で 12 件 → 9 件
- Phase 84-3: PhiTypeResolver 導入で 9 件 → 4 件
**残タスク**: PHI 推論強化Phase 84-3、PhiTypeResolver)と if_phi フォールバック縮退
**残タスク**: BoxCall/Await/QMark 戻り値型の登録Phase 84-4)とif_phi フォールバックの最終縮退
---
## 問題の核心
### ❌ 現在の実装(バグ)
### 初期段階Const 命令の型アノテーション欠如
```rust
// Integer/Bool/Float/Null/Void は型を登録しない
@ -58,10 +59,13 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
- `mir_stage1_cli_entry_like_pattern_verifies` - return 系
- 他の return リテラルを含むテスト
### 残存する問題(8-10 件
### 残存する問題(現時点の整理
- **Copy命令型伝播不足** (6-8件) - Loop/If の edge copy
- **PHI型推論限界** (2-4件) - Await/Try-Catch/複雑な制御フロー
- **BoxCall/Await/QMark 戻り値型の未登録**
- await 構文(`test_lowering_await_expression`
- QMark (`?`) 構文(`mir_lowering_of_qmark_propagate`
- Stage1 CLI 系の BoxCall 戻り値2 テスト)
- PhiTypeResolver 自体は設計通り動作しており、base 定義BoxCall 等)に型が入っていないために Case D が残っている。
---
@ -104,11 +108,15 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
### Phase 84-3: PHI型推論強化長期
**期待効果**: Case D が 2-4件 → 0件完全解決
**Status**: ✅ PhiTypeResolver 導入完了PHI + Copy グラフの安全な型推論
**所要時間**: 要検討(複雑度による)
**内容**:
- `PhiTypeResolver``Copy`/`Phi` グラフを DFS/BFS で辿り、末端の base 定義型が 1 種類に揃う場合にのみ MirType を返す。
- lifecycle.rs の return 型推論フローに統合し、P3-D/Const/CopyTypePropagator で埋まらないケースの一部を吸収。
**リスク**: 高(再帰的解析のパフォーマンス)
**効果**:
- Case D: 9 件 → 4 件(約 56% 削減)。
- 残り 4 件は BoxCall/Await/QMark 戻り値型が `value_types` に登録されていないため、PhiTypeResolver から見ても「base 型が不明」のケースとして扱われている。
---
@ -120,8 +128,8 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
2. **Phase 84-2 も完了済み**
- Copy チェーンだけで説明できる Case D は削減済みで、残りは PHI 主体の複雑ケースに集中。
3. **Phase 84-3 は「PHI 強化」を必要最小限で検討**
- Await/Try-Catch や多段 PHI チェーンなど、本当に必要なパターンだけを PhiTypeResolver で扱う
3. **Phase 84-3PhiTypeResolverは導入済み**
- PHI + Copy グラフ上で安全に決められるケースは吸収済みで、残り 4 件は「base 定義側に型がない」という別レイヤの問題に集約された
---
@ -133,12 +141,24 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
| Phase 83 後 | 15 件 | 25% | MethodReturnHintBoxP3-D |
| Phase 84-1 後 | 12 件 | 40% | Const 型アノテーション |
| Phase 84-2 後 | 9 件 | 55% | CopyTypePropagator |
| Phase 84-3 後(目標) | 0-2 件 | 80-100% | PhiTypeResolver必要最小限 |
| Phase 84-3 後 | 4 件 | 80% | PhiTypeResolverPHI + Copy グラフ |
| Phase 84-4 後(目標) | 0-2 件 | 90-100% | BoxCall/Await/QMark 型登録 |
**最終目標**: Case D を 0-2 件まで縮小し、`infer_type_from_phi*` を本線から外せる状態にする。
---
## Phase 84-4 方針(案)
- Phase 84-4-A: dev フォールバック
- 開発時のみ PHI fallback を許可するガードを追加し、自分用のデバッグラインを確保。
- Phase 84-4-B: BoxCall 戻り値型の登録
- BoxCall lowering で戻り値型を `value_types` に登録し、Stage1 CLI 系 2 テストを根本解決。
- Phase 84-4-C: Await/QMark 戻り値型の処理
- await/QMark lowering で中間値の型を登録し、await/QMark テスト 2 件を解消。
---
## 詳細分析
完全な分析レポートは以下を参照: