Files
hakorune/docs/development/current/main/phase33-17-joinir-modularization-analysis.md

238 lines
6.6 KiB
Markdown
Raw Normal View History

Status: Active
Scope: Phase 33-17 の JoinIR モジュール化分析の要約(現行参照用)。詳細メモは archive 側へ移行。
feat(joinir): Phase 33-22 CommonPatternInitializer & JoinIRConversionPipeline integration Unifies initialization and conversion logic across all 4 loop patterns, eliminating code duplication and establishing single source of truth. ## Changes ### Infrastructure (New) - CommonPatternInitializer (117 lines): Unified loop var extraction + CarrierInfo building - JoinIRConversionPipeline (127 lines): Unified JoinIR→MIR→Merge flow ### Pattern Refactoring - Pattern 1: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 2: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 3: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 4: Uses CommonPatternInitializer + JoinIRConversionPipeline (-40 lines) ### Code Reduction - Total reduction: ~115 lines across all patterns - Zero code duplication in initialization/conversion - Pattern files: 806 lines total (down from ~920) ### Quality Improvements - Single source of truth for initialization - Consistent conversion flow across all patterns - Guaranteed boundary.loop_var_name setting (prevents SSA-undef bugs) - Improved maintainability and testability ### Testing - All 4 patterns tested and passing: - Pattern 1 (Simple While): ✅ - Pattern 2 (With Break): ✅ - Pattern 3 (If-Else PHI): ✅ - Pattern 4 (With Continue): ✅ ### Documentation - Phase 33-22 inventory and results document - Updated joinir-architecture-overview.md with new infrastructure ## Breaking Changes None - pure refactoring with no API changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-07 21:02:20 +09:00
# Phase 33-17: JoinIR モジュール化分析
## 実行日: 2025-12-07
## 現状のファイルサイズ分析
```
649行 instruction_rewriter.rs ⚠️ 最大のファイル目標200行の3.2倍)
405行 exit_binding.rs ✅ 適切(テスト含む)
355行 pattern4_with_continue.rs
338行 routing.rs
318行 loop_header_phi_builder.rs ⚠️ やや大きい
300行 merge/mod.rs ✅ 適切
250行 trace.rs
228行 ast_feature_extractor.rs
214行 pattern2_with_break.rs
192行 router.rs
176行 pattern1_minimal.rs
163行 pattern3_with_if_phi.rs
157行 exit_line/reconnector.rs
139行 exit_line/meta_collector.rs
104行 value_collector.rs
103行 exit_line/mod.rs
98行 exit_phi_builder.rs
65行 block_allocator.rs
```
## 🎯 モジュール化推奨事項
### 優先度A: instruction_rewriter.rs (649行 → 3ファイル200行以下)
**問題**:
- 1ファイル649行は箱理論の単一責任原則に違反
- 3つの独立した関心事が混在:
1. **TailCallKind分類ロジック** (70行)
2. **命令書き換え処理** (400行)
3. **MergeResult構築** (170行)
**推奨分割**:
```
instruction_rewriter.rs (649行)
1. tail_call_classifier.rs (90行)
- TailCallKind enum
- classify_tail_call()
- 分類ロジックの完全カプセル化
2. instruction_mapper.rs (350行)
- merge_and_rewrite() のコア処理
- Call→Jump変換
- 命令リマッピング
3. boundary_injector.rs (180行)
- BoundaryInjector 呼び出し
- Copy命令生成
- boundary関連ロジック
4. merge_result.rs (30行)
- MergeResult struct定義
- 関連ヘルパー
```
**効果**:
- ✅ 単一責任の原則完全準拠
- ✅ テスタビリティ向上tail call分類を独立テスト可能
- ✅ 可読性向上ファイルサイズ200行以下
---
### 優先度B: loop_header_phi_builder.rs (318行 → 2ファイル)
**問題**:
- 318行は200行目標を58%超過
- 2つの関心事が存在:
1. **LoopHeaderPhiInfo管理** (データ構造)
2. **LoopHeaderPhiBuilder構築ロジック** (アルゴリズム)
**推奨分割**:
```
loop_header_phi_builder.rs (318行)
1. loop_header_phi_info.rs (150行)
- LoopHeaderPhiInfo struct
- CarrierPhiEntry struct
- get/set メソッド
2. loop_header_phi_builder.rs (170行)
- LoopHeaderPhiBuilder
- build() 実装
- finalize() 実装
```
**効果**:
- ✅ データとロジックの分離
- ✅ LoopHeaderPhiInfo を他モジュールから独立利用可能
- ✅ ファイルサイズ200行以下達成
---
### 優先度C: pattern4_with_continue.rs (355行)
**問題**:
- 355行目標の1.8倍)
- Pattern 2/3との重複コードが存在する可能性
**推奨調査**:
```bash
# Pattern 2/3/4の共通ヘルパー抽出可能性を調査
grep -A5 "extract.*variable\|build.*boundary" pattern*.rs
```
**暫定推奨**:
- Pattern 4は継続フラグで大きくなるのは自然
- 共通ヘルパーがあれば `pattern_helpers.rs` に抽出
- なければ現状維持Phase 33-17の対象外
---
### 優先度D: routing.rs (338行)
**問題**:
- 338行目標の1.7倍)
- パターンルーティングロジックが肥大化
**推奨調査**:
- Pattern 1-4の条件分岐ロジックが重複していないか確認
- 抽出可能な共通ロジックがあれば分離
**暫定推奨**:
- ルーティングは本質的に線形な条件分岐になる
- 無理に分割せず、Phase 34以降で見直し
---
## 🚀 実装計画
### Phase 33-17-A: instruction_rewriter分割最優先
**タスク**:
1. tail_call_classifier.rs 作成TailCallKind + classify_tail_call
2. boundary_injector_wrapper.rs 作成BoundaryInjector呼び出し
3. instruction_mapper.rs 作成merge_and_rewriteコア
4. merge_result.rs 作成MergeResult struct
5. instruction_rewriter.rs → 上記4ファイルへ移行
6. merge/mod.rs の import 更新
7. cargo build --release 確認
**期待効果**:
- instruction_rewriter.rs: 649行 → 削除4ファイルに分散
- 最大ファイル: 350行instruction_mapper.rs
- 200行超ファイル: 2個instruction_mapper, pattern4
---
### Phase 33-17-B: loop_header_phi_builder分割次点
**タスク**:
1. loop_header_phi_info.rs 作成(データ構造)
2. loop_header_phi_builder.rs → ビルダーロジックのみ残す
3. merge/mod.rs の import 更新
4. cargo build --release 確認
**期待効果**:
- loop_header_phi_builder.rs: 318行 → 170行
- loop_header_phi_info.rs: 新規 150行
- 200行超ファイル: 1個instruction_mapper のみ)
---
## 📊 完成後の予測
### Before (Phase 33-16)
```
649行 instruction_rewriter.rs ⚠️
318行 loop_header_phi_builder.rs ⚠️
355行 pattern4_with_continue.rs ⚠️
```
### After (Phase 33-17完了後)
```
350行 instruction_mapper.rs ⚠️ (許容範囲)
355行 pattern4_with_continue.rs ⚠️ (継続フラグで妥当)
180行 boundary_injector_wrapper.rs ✅
170行 loop_header_phi_builder.rs ✅
150行 loop_header_phi_info.rs ✅
90行 tail_call_classifier.rs ✅
30行 merge_result.rs ✅
```
**達成指標**:
- ✅ 200行超ファイル: 4個 → 2個50%削減)
- ✅ 最大ファイル: 649行 → 355行45%削減)
- ✅ 単一責任の原則完全準拠
---
## 🎯 Next Steps
1. **Phase 33-17-A実装** → instruction_rewriter分割優先度最高
2. **Phase 33-17-B実装** → loop_header_phi_builder分割
3. **Pattern 4調査** → 共通ヘルパー抽出可能性検証
4. **Phase 33-18検討** → routing.rs の最適化(必要に応じて)
---
## 箱理論への準拠
### 設計哲学
-**TailCallClassifier Box**: 分類ロジックの完全カプセル化
-**BoundaryInjectorWrapper Box**: boundary処理の委譲
-**InstructionMapper Box**: 命令変換の単一責任
-**LoopHeaderPhiInfo Box**: データ構造の独立管理
### 命名規則
- `〜Classifier`: 分類・判定ロジック
- `〜Mapper`: 変換・マッピング処理
- `〜Wrapper`: 外部Boxへの委譲
- `〜Info`: データ構造管理
---
## 📝 実装時の注意点
1. **後方互換性**: merge/mod.rsからのインターフェースは変更しない
2. **テスト**: 既存のテストが全てパスすることを確認
3. **ドキュメント**: 各ファイルに箱理論の役割を明記
4. **段階的移行**: 1ファイルずつ移行 → ビルド確認 → 次へ
---
**Status**: 分析完了、Phase 33-17-A実装準備完了
**Estimated Time**: Phase 33-17-A (2時間), Phase 33-17-B (1時間)