Phase 66: P3-C ジェネリック型推論箱化 - generic_type_resolver.rs 新設 (180行) - is_generic_method(): ArrayBox.get/pop/first/last, MapBox.get 判定 - resolve_from_phi(): PHI解析によるジェネリック型推論 - TypeHintPolicy::is_p3c_target() 追加 - P1/P2/P3-A/P3-B 以外を P3-C 候補として判定 Phase 67: P3-C 実利用への一歩 - phase67_generic_type_resolver.rs テスト追加 (3テスト) - lifecycle.rs に P3-C 経路フック追加 - GenericTypeResolver を P3-C 対象関数で優先使用 - A/B テストで旧経路との一致確認 (11 tests PASS) Phase 68: JoinIR First Chapter Wrap (ドキュメント整理) - 68-1: phase-30 README.md に Section 9 追加 (JoinIR 第1章完了サマリー) - 68-2: README.md に JoinIR status セクション追加 - 68-3: CURRENT_TASK.md スリム化 (351→132行, 62%削減) - 68-4: PHI_BOX_INVENTORY.md に Phase 66-67 完了セクション追加 Phase 69-1: Trio 棚卸し - phase69-1-trio-inventory.md 作成 - Trio 使用箇所の完全棚卸し完了 (削減見込み 457-707行) 🐱 JoinIR 第1章完了!4つの柱確立: - Structure (LoopForm) - Scope (LoopScopeShape) - JoinIR (Select/IfMerge/Loop) - Type Hints (P1-P3-C) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
6.5 KiB
6.5 KiB
Current Task — JoinIR / PHI 削減スナップショット(2025-11-29 時点)
このファイルは「今どこまで終わっていて、次に何をやるか」を 1000 行以内でざっくり把握するためのスナップショットだよ。
過去の詳細ログはdocs/private/roadmap2/CURRENT_TASK_2025-11-29_full.mdや各 Phase の README/TASKS を見てね。
0. 現在地ざっくり
-
✅ JoinIR ラインは Phase 68 で一旦 Chapter Close!
- Phase 27-67 で JoinIR の「第1章(構造 + PHI + 型ヒント SSOT)」が完了。
- 4つの柱(Structure / Scope / JoinIR / Type Hints)が確立。
- 今後は Trio 削除ライン、wasm/Web デモライン、最適化ラインに分岐。
- 詳細: phase-30-final-joinir-world/README.md
-
最終ゴール
- 制御構造と PHI の意味論は JoinIR(+LoopScopeShape/IfPhiContext 等の薄い箱) に一本化する。
- 実行の SSOT は VM / LLVM ラインとし、JoinIR→MIR→VM/LLVM は「構造 SSOT → 実行 SSOT」への変換として扱う。
- 既存の PHI 箱(if_phi.rs / PhiBuilderBox / conservative.rs / Trio 等)は、JoinIR 側のカバレッジが十分になったところから順に削っていく。
-
これから(Phase 69+)
- Trio 削除ライン: LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox を LoopScopeShape に完全吸収。
- wasm/Web デモライン: JoinIR ベースの軽量デモ実装。
- 最適化ライン: JoinIR の最適化パスと LLVM/ny-llvmc 統合。
1. JoinIR 第1章完了までの道のり(Phase 33–67 簡潔版)
Phase 33-62: 構造 + PHI + スコープの基盤構築 ✅ 完了
- Phase 33-34: IfSelect/IfMerge lowering 実装、AST→JoinIR Frontend 設計・実装(If/Loop/Break/Continue)
- Phase 35-36: PHI 箱削減 HIGH/MEDIUM(537行削減: if_body_local_merge / phi_invariants / LoopSnapshotMergeBox 縮退)
- Phase 37-40: If 側 PHI Level 1/2(設計+array_ext.filter 移行、collect_assigned_vars 削除)
- Phase 41-46: If 側 PHI Level 3(NestedIfMerge、read_quoted_from、IfMerge 拡張)
- Phase 49-56: JoinIR Frontend 本線統合(print_tokens / filter)
- Phase 57-62: If 側 PHI 本体削減(conservative.rs 縮退、If Handler 箱化、PHI Core Cleanup)
詳細: 各 Phase の README を参照(docs/private/roadmap2/phases/phase-*/README.md)
Phase 63-67: 型ヒントライン完全実装 ✅ 完了(2025-11-30)
Phase 63-3: JoinIR 型ヒント最小配線
JoinInst::SelectとMergePairにtype_hint: Option<MirType>追加- 13ファイル更新、全 JoinIR テスト PASS
Phase 63-4: infer_type_from_phi 縮退設計
- 型ヒント優先+従来ロジックフォールバック仕様を docs 化
- 削除条件 5/5 を定義(P1: IfSelectTest, P2: read_quoted/IfMerge, P3: Method/Box)
Phase 63-5: infer_type_from_phi 縮退実装
infer_type_from_phi_with_hint()実装(+44行)- lifecycle.rs で呼び出し経路統一
- 削除条件達成率: 3/5(60%)
Phase 63-6: P1 ケース型ヒント完全実装
MirInstruction::Phiにtype_hint追加(21ファイル修正)- JoinIR→MIR Bridge で型ヒント伝播実装
- P1 ケース(IfSelectTest.*)で JoinIR 型ヒントのみで型決定
- 削除条件達成率: 4/5(80%)
Phase 64: P2 型ヒント拡大
- P2 ケース(read_quoted_from, IfMerge)型ヒント実装
is_type_hint_target()箱化(TypeHintPolicy 萌芽)- 削除条件達成率: 4.5/5(90%)
Phase 65: P3-A/B 型ヒント実装
- P3-A:
type_inference.rs新設、JoinInst::MethodCallに型ヒント(StringBox メソッド) - P3-B:
JoinInst::NewBoxに型ヒント(Box コンストラクタ) - 代表ケースベースで削除条件 5/5 達成
Phase 66: P3-C ジェネリック型推論箱化
generic_type_resolver.rs新設(180行)TypeHintPolicy::is_p3c_target()追加- ArrayBox.get / MapBox.get 等のジェネリック型推論基盤確立
Phase 67: P3-C 実利用への一歩
phase67_generic_type_resolver.rsテスト追加(3テスト全 PASS)- lifecycle.rs に P3-C 経路フック追加(GenericTypeResolver 優先使用)
- A/B テストで旧経路との一致確認(11 tests PASS)
技術的成果:
- JoinIR が構造 + PHI + 型ヒントの SSOT として確立
- infer_type_from_phi は P3-C フォールバック専用に縮退
- 4つの柱(Structure / Scope / JoinIR / Type Hints)完成
2. 次の一手(Phase 69+)
直近の候補タスク
-
Trio 削除ライン(Phase 69 候補)
- LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox を LoopScopeShape に完全吸収
- Phase 48-7: Trio/LoopScopeShape の将来扱い整理(docs-only)
-
P3-C 拡大 / If PHI 本体削除(Phase 70 候補)
- GenericTypeResolver 経由で全 P3-C ケースをカバー
infer_type_from_phi本体削除と if_phi.rs 大掃除
-
wasm/Web デモライン(Phase 71 候補)
- JoinIR ベースの軽量デモ実装
- ブラウザで動く最小構成
-
最適化ライン(Phase 72+ 候補)
- JoinIR 最適化パス実装
- LLVM/ny-llvmc 統合強化
バックログ
- Mir 決定性(小フェーズ)
MirFunction.blocks: HashMap→BTreeMapで非決定的テスト解消- Phase 25.1 同様のパターン適用
3. 旧フェーズ(過去ログへのポインタ)
古いフェーズの詳細な経緯やログは、以下のドキュメントと
docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md を見てね。
- Phase 21.7 — Static Box Methodization
- StaticMethodId / NamingBox で BoxName.method/arity 名前解決の SSOT 化。
- docs:
docs/development/current/main/phase-21.7-naming-ssot-checklist.mdなど。
- Phase 25.x / 26.x — LoopForm v2 / LoopSSA v2 / Exit PHI / ExitLiveness
- LoopForm v2 / LoopSSA v2 の整備と Exit PHI / ExitLiveness まわりの 4 箱構成。
- Phase 27–32 — JoinIR 初期実験〜汎用化
- LoopToJoinLowerer / LoopScopeShape / JoinIR VM Bridge を minimal ケースから Stage‑1 / Stage‑B へ広げていくライン。
- docs:
docs/private/roadmap2/phases/phase-27-joinir*,phase-31-looptojoin-lowerer,phase-32-joinir-complete-migrationなど。
CURRENT_TASK.md 自体は「いまどこを触っているか」と「次に何をやるか」を
1 画面で把握できる軽さを維持する方針だよ。***