docs(phase40-2): CURRENT_TASK.md Phase 40-2セクション追加
Phase 40-2設計フェーズ完了記録: - パイプライン移行設計(現状→目標) - 対象関数確定(array_ext.filter) - 経路切替ポイント(loop_builder.rs:1069, 1075) - A/Bテスト方針 - 削除条件(3条件) コード変更: なし(docs-only) 次のステップ: Phase 40-3マイグレーションフェーズ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
128
CURRENT_TASK.md
128
CURRENT_TASK.md
@ -126,6 +126,134 @@
|
||||
|
||||
---
|
||||
|
||||
### 1-00m. Phase 40-2 — array_ext.filter JoinIR統合設計(docs-only)(**完了** 2025-11-28)
|
||||
|
||||
**目的**
|
||||
- Phase 40-1インフラ完成を受け、旧AST→MIRパスをJoinIR経路に折り畳む設計を確定
|
||||
- array_ext.filterに特化した経路切替ポイント・A/Bテスト方針・削除条件を明確化
|
||||
- Phase 40-3実装フェーズへの具体的な橋渡し
|
||||
|
||||
**設計内容**
|
||||
|
||||
**パイプライン見取り図作成**:
|
||||
- **現状パイプライン(レガシー経路)**:
|
||||
```
|
||||
AST → MIR Builder (loop_builder.rs)
|
||||
→ collect_assigned_vars() (Line 1069, 1075)
|
||||
→ PHI生成 → VM/LLVM
|
||||
```
|
||||
- **目標パイプライン(JoinIR SSOT)**:
|
||||
```
|
||||
AST → Program (JSON v0)
|
||||
→ JoinIR Frontend (AstToJoinIrLowerer)
|
||||
→ JoinModule + JoinFuncMetaMap
|
||||
→ JoinIR→MIR Bridge (convert_with_meta)
|
||||
→ VM/LLVM
|
||||
```
|
||||
- **利点**: JoinIR Frontendがif-in-loop変数追跡のSSOT、PHI生成がBridgeに集約、二重管理解消
|
||||
|
||||
**対象関数と経路マッピング**:
|
||||
- **対象関数**: array_ext.filter唯一(Phase 39選定済み、8/10点)
|
||||
- **パターン**: if-in-loop with conditional modification(`if fn(v) { out.push(v) }`)
|
||||
- **経路切替ポイント**:
|
||||
- loop_builder.rs:1069 (then body) → JoinFuncMeta.if_modified_vars
|
||||
- loop_builder.rs:1075 (else body) → JoinFuncMeta.if_modified_vars
|
||||
- **現状責務**: collect_assigned_vars(&then_prog, &mut vars)でHashSet<String>蓄積→exit PHI生成
|
||||
- **目標責務**: JoinFuncMeta.if_modified_vars = {"out"}→convert_with_meta()でexit PHI生成
|
||||
|
||||
**JoinIR Frontend入口API設計**:
|
||||
- **使用API**: Phase 40-1作成済みの`lower_loop_with_if_meta(program_json) → (JoinModule, JoinFuncMetaMap)`
|
||||
- **JoinFuncMeta使い方**:
|
||||
```rust
|
||||
JoinFuncMeta {
|
||||
if_modified_vars: Some(HashSet::from(["out".to_string()])),
|
||||
// "out"はif文内で変更される変数
|
||||
}
|
||||
```
|
||||
- **載せる変数**: `out`(if文内で`out.push(v)`により変更)
|
||||
- **載せない変数**: `i`(if文内で変更なし)、`v`(local変数、exit不要)
|
||||
|
||||
**二重管理防止ポリシー**:
|
||||
- **SSOT宣言**: array_ext.filterについては
|
||||
- if-in-loop modified変数集合のSSOT: `JoinFuncMeta.if_modified_vars`
|
||||
- exit PHI生成のSSOT: `convert_with_meta()`
|
||||
- `collect_assigned_vars`: 削除候補(Phase 40-4)
|
||||
- **現時点**: 両経路併存(A/Bテストのため)
|
||||
|
||||
**JoinIR→MIR Bridge利用設計**:
|
||||
- **切り分けロジック**:
|
||||
```rust
|
||||
if is_array_ext_filter(func_name) {
|
||||
convert_with_meta(module, meta) // Route B
|
||||
} else {
|
||||
convert_join_module_to_mir(module) // Route A
|
||||
}
|
||||
```
|
||||
|
||||
**A/Bテスト設計**:
|
||||
- **Route A**: AST → MIR Builder → collect_assigned_vars → PHI → VM(レガシー)
|
||||
- **Route B**: AST → JoinIR Frontend → JoinFuncMeta → convert_with_meta → VM(SSOT)
|
||||
- **比較対象**:
|
||||
1. 実行結果: 入力`[1,2,3,4,5,6]`, predicate`x % 2 == 0` → 期待出力`[2,4,6]`
|
||||
2. Exit PHI形状: dumpしたときのφの有無と形(ソースブロック数・変数名一致)
|
||||
- **成功基準**: 実行結果一致 + Exit PHI形状一致 + 5回連続PASS
|
||||
|
||||
**array_ext.filter専用削除条件**:
|
||||
1. **A/Bテスト安定PASS**: Route A == Route B、Exit PHI形状一致、5回連続PASS
|
||||
2. **JoinIR経由のみでPHI生成**: array_ext.filterのループPHIはJoinIR→MIR bridgeだけで生成
|
||||
3. **callsite unused確認**: `rg collect_assigned_vars`でarray_ext.filter絡みの分岐が完全にunused
|
||||
|
||||
**削除タイミング**:
|
||||
- **Phase 40-3**: 経路切り替え実装、A/Bテスト実行
|
||||
- **Phase 40-4**: 上記条件すべて満たした後に削除
|
||||
|
||||
**Phase 40-3での dev flag 案**:
|
||||
```rust
|
||||
// loop_builder.rs:1069, 1075
|
||||
if std::env::var("NYASH_LEGACY_COLLECT_ASSIGNED_VARS").is_ok() {
|
||||
collect_assigned_vars(&then_prog, &mut vars); // Route A
|
||||
} else {
|
||||
// JoinFuncMetaから取得 // Route B
|
||||
}
|
||||
```
|
||||
|
||||
**技術的成果**
|
||||
1. **パイプライン移行設計確定**: 現状(レガシー)→目標(JoinIR SSOT)の具体的変換手順明確化
|
||||
2. **二重管理防止ポリシー確立**: SSOT宣言により責務分離明確化
|
||||
3. **A/Bテスト方針確定**: Route A vs Route B比較基準、成功基準、PASS回数(5回)
|
||||
4. **array_ext.filter専用削除条件定義**: 3条件チェックリスト化
|
||||
|
||||
**成果物**
|
||||
- ✅ README.md: パイプライン見取り図(~70行)
|
||||
- ✅ README.md: 対象関数と経路切替ポイント表(~60行)
|
||||
- ✅ README.md: JoinIR Frontend入口API設計(~50行)
|
||||
- ✅ README.md: 二重管理防止ポリシー(~20行)
|
||||
- ✅ README.md: Bridge利用設計(~30行)
|
||||
- ✅ README.md: A/Bテスト設計(~50行)
|
||||
- ✅ deletion_criteria_checklist.md: array_ext.filter専用削除条件(~50行)
|
||||
- ✅ PHI_BOX_INVENTORY.md: Phase 40-2更新(~50行)
|
||||
|
||||
**Rustコード変更**
|
||||
- **ゼロ**(docs-only、Phase 40-2完遂)
|
||||
|
||||
**追加行数合計**: ~380行(ドキュメント)
|
||||
|
||||
**Phase 35-40-2 累計削減**: 605行(Phase 35: 430行, Phase 38: 90行, Phase 39: 0行(設計), Phase 40-2: 0行(設計))
|
||||
**Phase 40-3/4 削減ポテンシャル**: 115行(Level 2、MEDIUM安全度)
|
||||
|
||||
**次のステップ(Phase 40-3)**
|
||||
- **経路切り替え実装**: loop_builder.rs:1069, 1075にdev flag追加
|
||||
- **JoinIR Frontend拡張**: array_ext.filter向けif-in-loop variable tracking実装
|
||||
- **A/Bテスト実行**: Route A vs Route B完全検証
|
||||
- **callsite unused確認**: `rg collect_assigned_vars`で分岐unused確認
|
||||
|
||||
**関連ドキュメント**
|
||||
- `docs/private/roadmap2/phases/phase-40-if-phi-level2/README.md` (Phase 40-2詳細、~330行追加)
|
||||
- `docs/private/roadmap2/phases/phase-39-if-phi-level2/deletion_criteria_checklist.md` (Phase 40-2更新、~50行追加)
|
||||
- `docs/private/roadmap2/phases/phase-30-final-joinir-world/PHI_BOX_INVENTORY.md` (Phase 40-2結論、~50行追加)
|
||||
|
||||
---
|
||||
|
||||
### 1-00l. Phase 39 — If側PHI Level 2削減準備(設計中心、docs-only)(**完了** 2025-11-28)
|
||||
|
||||
**目的**
|
||||
|
||||
Submodule docs/private updated: 4619cc3b76...c9592a5da2
Reference in New Issue
Block a user