From aa0b3972b98d4a5a300144f9d25ff55bcca5c4a7 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Fri, 28 Nov 2025 10:13:53 +0900 Subject: [PATCH] =?UTF-8?q?docs(phase40-2):=20CURRENT=5FTASK.md=20Phase=20?= =?UTF-8?q?40-2=E3=82=BB=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CURRENT_TASK.md | 128 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/private | 2 +- 2 files changed, 129 insertions(+), 1 deletion(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 0db93066..559cf677 100644 --- a/CURRENT_TASK.md +++ b/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蓄積→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) **目的** diff --git a/docs/private b/docs/private index 4619cc3b..c9592a5d 160000 --- a/docs/private +++ b/docs/private @@ -1 +1 @@ -Subproject commit 4619cc3b76cd8b2a210c8243ccb1fde074dfde4a +Subproject commit c9592a5da26b3a7874131636da8da92b6c24f37c