2025-11-28 12:02:52 +09:00
|
|
|
|
# Current Task — JoinIR / PHI 削減スナップショット(2025-11-29 時点)
|
2025-11-15 00:02:13 +09:00
|
|
|
|
|
2025-11-19 08:35:56 +09:00
|
|
|
|
> このファイルは「今どこまで終わっていて、次に何をやるか」を 1000 行以内でざっくり把握するためのスナップショットだよ。
|
2025-11-28 12:02:52 +09:00
|
|
|
|
> 過去の詳細ログは `docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md` や各 Phase の README/TASKS を見てね。
|
2025-11-15 05:42:32 +09:00
|
|
|
|
|
2025-11-15 00:02:13 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-11-19 08:35:56 +09:00
|
|
|
|
## 0. 現在地ざっくり
|
2025-11-13 16:40:58 +09:00
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- **✅ JoinIR ラインは Phase 68 で一旦 Chapter Close!**
|
|
|
|
|
|
- Phase 27-67 で JoinIR の「第1章(構造 + PHI + 型ヒント SSOT)」が完了。
|
|
|
|
|
|
- 4つの柱(Structure / Scope / JoinIR / Type Hints)が確立。
|
2025-11-30 11:46:14 +09:00
|
|
|
|
- Trio 削除ライン(Phase 70 完了)を経て、wasm/Web デモラインと最適化ラインに分岐。
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- 詳細: [phase-30-final-joinir-world/README.md](docs/private/roadmap2/phases/phase-30-final-joinir-world/README.md)
|
|
|
|
|
|
|
2025-11-29 14:57:06 +09:00
|
|
|
|
- **最終ゴール**
|
|
|
|
|
|
- 制御構造と PHI の意味論は **JoinIR(+LoopScopeShape/IfPhiContext 等の薄い箱)** に一本化する。
|
|
|
|
|
|
- 実行の SSOT は VM / LLVM ラインとし、JoinIR→MIR→VM/LLVM は「構造 SSOT → 実行 SSOT」への変換として扱う。
|
|
|
|
|
|
- 既存の PHI 箱(if_phi.rs / PhiBuilderBox / conservative.rs / Trio 等)は、JoinIR 側のカバレッジが十分になったところから順に削っていく。
|
|
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- **これから(Phase 69+)**
|
|
|
|
|
|
- wasm/Web デモライン: JoinIR ベースの軽量デモ実装。
|
|
|
|
|
|
- 最適化ライン: JoinIR の最適化パスと LLVM/ny-llvmc 統合。
|
2025-11-30 11:46:14 +09:00
|
|
|
|
- Trio 削除ライン: 完了(Phase 70、LoopScopeShape SSOT)
|
2025-11-28 12:02:52 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
## 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`)
|
2025-11-30 05:22:57 +09:00
|
|
|
|
|
2025-11-28 12:02:52 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
### 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)完成
|
|
|
|
|
|
|
2025-11-30 10:01:49 +09:00
|
|
|
|
### Phase 69: MIR 決定性 & Trio 経路の整理 ✅ 一部完了(2025-11-30)
|
|
|
|
|
|
|
|
|
|
|
|
- 目的: LoopSnapshotMergeBox / LoopForm 周辺の Inspector/Trio 依存を整理しつつ、MIR の predecessor 順を決定的にしてフラッキーテストを解消する。
|
|
|
|
|
|
- 実績:
|
|
|
|
|
|
- 69-1: LoopSnapshotMergeBox と Trio 経路の現状を確認し、merge_exit_with_classification が LocalScopeInspectorBox を引き回しているだけであり、情報自体は LoopScopeShape/ExitAnalysis 側に揃っていることを整理。
|
|
|
|
|
|
- 69-2: `merge_exit_with_classification` から Inspector 引数を削除し、LoopScopeShape/ExitAnalysis 経由で必要な情報を取る形に縮退(約 42 行削減)。既存の 3 テストはすべて PASS。
|
|
|
|
|
|
- 69-3: `BasicBlock.predecessors` を `HashSet` → `BTreeSet` に変更するなど、MIR の predecessor イテレーションを決定的にし、これまで非決定性でフラッキーだった 2 つのループ系テストを安定化。loopform 14/14 / merge_exit 3/3 を含む関連テストはすべて PASS。
|
|
|
|
|
|
- 未了:
|
|
|
|
|
|
- 69-5: conservative.rs の docs/ 移設も今後の小フェーズとして残しておく。
|
2025-11-30 11:46:14 +09:00
|
|
|
|
- 追加完了 (Phase 70):
|
|
|
|
|
|
- 69-4: Trio 3 箱(LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox)を削除し、LoopScopeShape を SSOT とする構成に移行。
|
2025-11-30 10:01:49 +09:00
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
## 2. 次の一手(Phase 69+)
|
|
|
|
|
|
|
|
|
|
|
|
### 直近の候補タスク
|
|
|
|
|
|
|
2025-11-30 11:46:14 +09:00
|
|
|
|
- **Phase 70 完了**: Trio 3 箱削除(LoopScopeShape SSOT)
|
2025-11-30 08:54:18 +09:00
|
|
|
|
|
|
|
|
|
|
- **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 同様のパターン適用
|
2025-11-28 12:02:52 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 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 画面で把握できる軽さを維持する方針だよ。***
|