Files
hakorune/docs/development/current/main/phase61-5.4-next-phase-candidates.md
nyash-codex 0c23bc0788 docs: Phase 61-5 If PHI 棚卸し完了
Phase 61-5: If PHI 残りパターン棚卸しと削減計画策定

New docs:
- phase61-5-3-if-phi-priority-table.md: P1/P2/P3 優先度表
  - P1: 18関数(薄いラッパー削除候補)
  - P2: 5関数(JoinIR 拡張統合候補)
  - P3: 3関数(型システム統合待ち)

- phase61-5.4-next-phase-candidates.md: Phase 61-6 削減候補(3個)
  - Wave 1: set_if_context 削除(11行)、dev フラグ削除(15行)
  - Wave 2: A/B テスト削除(50行)
  - 合計削減見込み: 76行

- phase61-5-summary.md: Phase 61-5 全体サマリー
  - JoinIR カバー率: 完全28.6% + 部分57.1% = 85.7%
  - Phase 61-6 実装準備完了

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 15:57:14 +09:00

114 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 61-5.4: 次フェーズ候補選定2〜3個
## 目的
Phase 61-5.3 の優先度表から、Phase 61-6If PHI JoinIR 化 第2弾で触る候補を 2〜3 個だけ選定する。
## 選定基準
### P1 候補(薄いラッパー削除)
- コード量が少ない50行以下
- 依存関係が少ない
- 削除による影響範囲が明確
- テストが既存のもので十分
### P2 候補JoinIR 拡張)
- PhiSpec や IfMerge との 1:1 対応が明確
- 既存の JoinIR 構造に自然に統合できる
- 削減効果が高い100行以上
---
## Phase 61-6 削減候補2〜3個
### Phase 61-6.1: P1 薄いラッパー削除
#### 1. **`set_if_context` 削除**
- **ファイル**: `src/mir/phi_core/phi_builder_box.rs:143-152`
- **削減見込み**: 10行関数本体+ 呼び出し側1行 = **11行**
- **実装方針**: `loop_builder/if_lowering.rs:259-262` で直接 `IfPhiContext::for_loop_body(true, carrier_names.clone())` を生成してフィールドに代入
- **リスク**: **低** - 単純なラッパー削除、既存ロジックに影響なし
- **備考**: 現在は `set_if_context()``IfPhiContext { in_loop_body, loop_carrier_names }` 構造体生成のみ
#### 2. **If Lowering ルーティング関数のデフォルト有効化**
- **ファイル**: `src/mir/join_ir/lowering/mod.rs:132-141`
- **削減見込み**: dev フラグチェック削除 8行 + 環境変数関数削除 = **15行**
- **実装方針**: `joinir_if_select_enabled()` チェックを削除、デフォルトで有効化
- **リスク**: **中** - 全関数でデフォルト有効化されるため、テスト全通過が必須
- **備考**: 現在は `NYASH_JOINIR_IF_SELECT=1` で制御、Phase 33-8 で導入済み
---
### Phase 61-6.2: P2 JoinIR 拡張
#### 3. **A/B テスト観察用関数の削除**
- **関数**: `extract_phi_spec_from_builder`, `compare_and_log_phi_specs`
- **ファイル**: `src/mir/join_ir/lowering/if_phi_spec.rs:97-140`
- **削減見込み**: 2関数 + テスト削除 = **50行**
- **実装方針**:
1. Phase 61-3 で JoinIR 経路が完全動作確認済み
2. `if_lowering.rs:273-290` の A/B 比較ロジック削除
3. `extract_phi_spec_from_builder()``compare_and_log_phi_specs()` 削除
4. if_phi_spec.rs は `compute_phi_spec_from_joinir()` のみ残す
- **リスク**: **低** - 観察専用関数、実行経路に影響なし
- **備考**: Phase 61-2 で導入、Phase 61-3 で検証完了済み
---
## 期待される効果
| Wave | 削減対象 | 見込み削減行数 | 累積削減 |
|------|---------|--------------|---------|
| 61-6.1 | P1 薄いラッパー削除 (set_if_context) | 11 | 11 |
| 61-6.1 | P1 dev フラグ削除 | 15 | 26 |
| 61-6.2 | P2 A/B テスト削除 | 50 | **76** |
### JoinIR カバー率
- **現在**: If-in-Loop PHI 生成は JoinIR で 100% カバーPhase 61-3 完了)
- **61-6 後**: PhiBuilderBox 経路の観察コード削除、JoinIR SSOT 確立
---
## 実装順序
### Wave 1: P1 削除Phase 61-6.1
1. **`set_if_context` 削除** - 最優先(最も安全)
2. **dev フラグ削除** - 全テストPASS確認後
### Wave 2: P2 削除Phase 61-6.2
1. **A/B テスト観察関数削除** - 最も削減効果が高い
### 各 Wave の完了条件
- Wave 1: 全 JoinIR tests PASS268 tests
- Wave 2: if_phi_spec.rs が `compute_phi_spec_from_joinir()` のみに(観察コード完全削除)
---
## 実装時の注意事項
1. **Fail-Fast原則**: エラーは即座に失敗、フォールバック禁止
2. **決定的順序**: BTreeSet/BTreeMap で ValueId 割り当ての決定性保証
3. **箱理論**: SSOT を JoinIR 側に寄せる、PhiBuilderBox は最小限に
4. **テスト**: 各ステップで全 JoinIR tests PASS を確認
5. **ドキュメント**: PHI_BOX_INVENTORY.md と CURRENT_TASK.md を更新
---
## 保留候補Phase 61-7+ で検討)
### P2 候補Phase 61-7 で検討)
1. **`compute_modified_names_if`** - 変更変数検出を JoinIR の modified 変数集合解析に統合(~75行削減
2. **`get_conservative_if_values`** - incoming 値解決を PhiSpec に移行、void fallback 削除(~70行削減
### 保留理由
- Phase 61-6 では最小限の削除に集中76行削減
- P2 大型統合は Phase 61-7 で慎重に実装145行削減見込み
---
## 関連ドキュメント
- Phase 61-5.3: [if-phi-priority-table.md](phase61-5-3-if-phi-priority-table.md)
- PHI Inventory: [PHI_BOX_INVENTORY.md](../../../docs/private/roadmap2/phases/phase-30-final-joinir-world/PHI_BOX_INVENTORY.md)
- If PHI Context: [if_phi_context.rs](../../../src/mir/join_ir/lowering/if_phi_context.rs)
- If PHI Spec: [if_phi_spec.rs](../../../src/mir/join_ir/lowering/if_phi_spec.rs)