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-12-01 11:10:46 +09:00
|
|
|
|
- Stage-3 parser デフォルトON化(Phase 30.1 完了): `config::env::parser_stage3_enabled()` で NYASH_FEATURES=stage3 をSSOT化し、legacy env は明示OFF専用の互換に縮退。
|
|
|
|
|
|
- JoinIR Strict 着手(Phase 81): `NYASH_JOINIR_STRICT=1` で代表パスのフォールバックを禁止(JoinIR失敗は即エラー)。dev/trace は観測のみ継続。
|
2025-11-29 14:57:06 +09:00
|
|
|
|
|
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-12-01 11:10:46 +09:00
|
|
|
|
- JoinIR Strict ライン(Phase 81): 代表 If/Loop/VM ブリッジについては `NYASH_JOINIR_STRICT=1` で常に JoinIR 経路のみを通すようにし、レガシー if_phi / LoopBuilder / 旧 MIR Builder は「未対応関数専用」に縮退。
|
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):
|
2025-12-01 11:10:46 +09:00
|
|
|
|
- 69-4: Trio 3 箱(LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox)を削除し、LoopScopeShape を SSOT とする構成に移行。2025-12-01 時点でコードベース再スキャン済みで、Trio 本体ファイルおよび Trio Box 直接参照は **src/mir/** から完全に除去されていることを確認(名称としての「Trio」は docs の歴史メモ内にのみ残存)。
|
2025-11-30 10:01:49 +09:00
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
## 2. 次の一手(Phase 69+)
|
|
|
|
|
|
|
|
|
|
|
|
### 直近の候補タスク
|
|
|
|
|
|
|
2025-11-30 14:30:28 +09:00
|
|
|
|
- **P3-C 拡大 / If PHI 本体削除**(Phase 70+ 候補)
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- GenericTypeResolver 経由で全 P3-C ケースをカバー
|
|
|
|
|
|
- `infer_type_from_phi` 本体削除と if_phi.rs 大掃除
|
|
|
|
|
|
|
2025-12-02 10:19:07 +09:00
|
|
|
|
- **Phase 71: Self‑Hosting 再ブートストラップ(初回観測完了! 2025-12-02)** ✅
|
2025-12-01 11:10:46 +09:00
|
|
|
|
- `docs/private/roadmap2/phases/phase-71-selfhost-reboot/README.md` で代表パス 1 本(Stage‑3 + JoinIR 前提)と ENV 方針を整理済み。
|
2025-12-02 10:19:07 +09:00
|
|
|
|
- 代表パス(確定): `NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 NYASH_NY_COMPILER_EMIT_ONLY=1 NYASH_SELFHOST_KEEP_RAW=1 ./tools/selfhost/selfhost_build.sh --in apps/tests/stage1_run_min.hako --run`
|
|
|
|
|
|
- **Phase 71初回実行成果 (2025-12-02)**:
|
|
|
|
|
|
- ✅ Phase 70完了直後にPhase 71代表パス実行成功
|
|
|
|
|
|
- ✅ RAW観測レイヤ活用成功 (`logs/selfhost/stageb_20251202_101623_2665649.log` 707K)
|
|
|
|
|
|
- ✅ 根本原因特定: **SSA undef (4件)** + **dev verify (1件)** が Program JSON emit失敗を引き起こしている
|
|
|
|
|
|
- ✅ JoinIR/プラグイン初期化は **問題なし** (JoinIR経路正常動作、プラグイン成功確認)
|
2025-12-02 14:07:19 +09:00
|
|
|
|
- **SSA undef詳細 (初回観測時)**:
|
2025-12-02 10:19:07 +09:00
|
|
|
|
1. `ParserCommonUtilsBox.trim/1` - ValueId(272)未定義
|
|
|
|
|
|
2. `ParserBox.trim/1` - ValueId(272)未定義
|
|
|
|
|
|
3. `Main._parse_number/1` - ValueId(12)未定義
|
2025-12-02 14:07:19 +09:00
|
|
|
|
4. `ParserBox.parse_block2/2` - ValueId(440)未定義
|
|
|
|
|
|
→ Phase 71-SSA での `.hako` 側整理により、現在はいずれも解消済み(SSA undef 13件→0件)。
|
|
|
|
|
|
- **dev verify警告 (初回観測時)**: `StageBDriverBox` NewBox直後にbirth()未呼び出し
|
|
|
|
|
|
→ StageBDriverBox が static box であることを考慮し、lifecycle.rs 側の特例で警告は解消済み。
|
|
|
|
|
|
- **完了判定基準**: 観測窓としてのPhase 71は完了。代表 selfhost パスで JSON v0 emit→VM 実行(出力 `abc`)まで通ることを確認済みで、
|
|
|
|
|
|
SSA 修正は今後 Stage‑B 他ケースと s3/parity 系にフォーカスする。
|
|
|
|
|
|
- **詳細レポート**: `docs/development/current/main/phase71-findings-20251202.md` と Phase 71-SSA 追加レポート
|
2025-12-01 11:10:46 +09:00
|
|
|
|
- quick プロファイルでは JoinIR/VM 系は緑維持を目標としつつ、selfhost_minimal / stageb_min_emit は「SSA ラインの観測窓」として赤許容。Stage‑B/SSA 起因の赤は Phase 71-SSA 側でハンドルする。
|
|
|
|
|
|
|
2025-12-02 14:07:19 +09:00
|
|
|
|
- **Phase 72: JoinIR dev フラグ棚卸し** ✅
|
|
|
|
|
|
- `config::env::joinir_core_enabled()` / `joinir_dev_enabled()` を追加し、Core/DevOnly/Deprecated の区分を整理。
|
|
|
|
|
|
- `NYASH_JOINIR_EXPERIMENT` や `HAKO_JOINIR_IF_SELECT` を含む JoinIR 関連フラグの読み書きを、
|
|
|
|
|
|
`src/config/env/joinir_dev.rs` / `src/tests/helpers/joinir_env.rs` 経由の SSOT に統一(本体コードからの `std::env` 直読みを排除)。
|
|
|
|
|
|
- docs/private/roadmap2/phases/phase-72-joinir-dev-flags/README.md に一覧表と実装状況メモを追加済み。
|
2025-11-30 14:30:28 +09:00
|
|
|
|
|
|
|
|
|
|
- **Phase 73: ENV 整理・不要フラグ削除(JoinIR+Stage‑3 周辺)**
|
|
|
|
|
|
- docs/private/roadmap2/phases/phase-73-env-cleanup/README.md に Stage‑3 / JoinIR / その他 ENV の棚卸しと Dead/Alias/Keep の分類方針を追加
|
|
|
|
|
|
- 実コードからは `parser_stage3_enabled()` / `joinir_core_enabled()` / `joinir_dev_enabled()` 経由で判定し、legacy/env 名は Alias-only 扱いとして段階的に削除候補へ寄せていく
|
|
|
|
|
|
- Stage‑3 旧 ENV は tools/selfhost/hako_check + JoinIR/LoopForm/PHI テスト + Stage‑1/SSA 代表テスト(Batch‑C)からは排除済みで、残りは dev/perf 用や一部 SSA/Stage‑B 系テストと docs の歴史メモに限定されている(Phase 73‑11 で現状を棚卸し済み)
|
|
|
|
|
|
|
|
|
|
|
|
- **Phase 73-7: Stage‑3 旧 ENV の縮退**
|
|
|
|
|
|
- tools/selfhost/hako_check から `NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3` を順次削除し、Stage‑3 gate を `NYASH_FEATURES=stage3` ベースに移行開始
|
|
|
|
|
|
- Rust tests 側の Stage‑3 alias は次フェーズでグループごとに `NYASH_FEATURES=stage3` へ寄せる予定
|
|
|
|
|
|
|
|
|
|
|
|
- **Phase 73-8: Rust tests Batch‑A の Stage‑3 ENV 縮退**
|
|
|
|
|
|
- JoinIR/PHI 周辺の代表テスト(mir_loopform_* / mir_joinir_* の一部)を対象に、`NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3` を `NYASH_FEATURES=stage3` に置き換え開始
|
|
|
|
|
|
|
|
|
|
|
|
- **Phase 73-9: Rust tests Batch‑B の Stage‑3 ENV 縮退**
|
|
|
|
|
|
- 残りの JoinIR 系テスト(joinir_runner_min / mir_joinir_* / joinir_json_min / joinir_vm_bridge_* / joinir/mainline_phase49)についても、Stage‑3 旧 ENV を廃止し `NYASH_FEATURES=stage3` ベースに統一
|
|
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- **wasm/Web デモライン**(Phase 71 候補)
|
|
|
|
|
|
- JoinIR ベースの軽量デモ実装
|
|
|
|
|
|
- ブラウザで動く最小構成
|
|
|
|
|
|
|
|
|
|
|
|
- **最適化ライン**(Phase 72+ 候補)
|
|
|
|
|
|
- JoinIR 最適化パス実装
|
|
|
|
|
|
- LLVM/ny-llvmc 統合強化
|
|
|
|
|
|
|
2025-12-02 09:45:54 +09:00
|
|
|
|
### 今後の優先タスク順(selfhost + hack_check 観点の整理)
|
|
|
|
|
|
|
2025-12-02 14:07:19 +09:00
|
|
|
|
1. **Phase 71-SSA/selfhost 再ブートストラップの収束**
|
|
|
|
|
|
- 代表パス(selfhost_build + stage1_run_min.hako)が JSON v0 emit→VM 実行まで通ることは確認済みとし、
|
|
|
|
|
|
以降は Stage‑B 他ケースと s3/parity 系を「SSA ラインの観測窓」として整理していく。
|
2025-12-02 09:45:54 +09:00
|
|
|
|
- この段階では JoinIR Strict は代表 if/loop/VM ブリッジに限定し、selfhost_minimal/stageb_min_emit の赤は SSA 側の課題として扱う。
|
2025-12-02 14:07:19 +09:00
|
|
|
|
2. **Phase 72–73: ENV / JoinIR dev フラグの集約完了** ✅
|
|
|
|
|
|
- `joinir_core_enabled()` / `joinir_dev_enabled()` / `parser_stage3_enabled()` を SSOT として使い切り、tools/selfhost/hako_check/tests から旧 ENV を整理する。
|
2025-12-02 09:45:54 +09:00
|
|
|
|
- ここまでで「selfhost / hack_check / tests が同じ Stage‑3 + JoinIR/ENV ポリシー上に乗る」状態を目指す。
|
2025-12-02 14:07:19 +09:00
|
|
|
|
3. **Phase 80: VM/LLVM 本線の JoinIR 統一** ✅ **完了**(2025-12-02 c61f4bc7)
|
|
|
|
|
|
- 代表 if/loop の本線化を実装。`joinir_core_enabled()` 時は JoinIR→MIR 経路が既定となり、レガシー経路は JoinIR 未対応ケース専用に縮退。
|
|
|
|
|
|
- SSOT ヘルパー(`should_try_joinir_mainline()` / `should_panic_on_joinir_failure()`)を実装。
|
|
|
|
|
|
- **Phase 82**: JOINIR_TARGETS テーブル SSOT 化(93f51e40)完了。
|
|
|
|
|
|
4. **Phase 81: selfhost 用 JoinIR Strict+fail-fast の確立** ✅ **完了**(2025-12-02 a9e10d2a)
|
|
|
|
|
|
- selfhost_build.sh に `--core` / `--strict` オプション追加。環境変数 `NYASH_JOINIR_CORE` / `NYASH_JOINIR_STRICT` を子プロセスに自動伝播。
|
|
|
|
|
|
- 代表パス(skip_ws / trim / resolve / print_tokens / filter / Stage‑1/Stage‑B 代表)が JoinIR 経由でのみ通る Strict モード実装完了。
|
|
|
|
|
|
- hack_check ラインは引き続き「Stage‑3 + 旧 MIR Builder + VM」の安定ルートとして維持。
|
|
|
|
|
|
5. **Phase 82-if-phi-retire: P3-C 完了+if_phi.rs 削除** ← **次の焦点**
|
|
|
|
|
|
- P3-C 代表ケースを含む型決定を GenericTypeResolver で食い切り、`lifecycle.rs` から `infer_type_from_phi*` 呼び出しを排除する。
|
|
|
|
|
|
- `collect_assigned_vars_via_joinir` を JoinIR/AST 側の分析モジュールに移し、`phi_core::if_phi` への参照をゼロにした上で `if_phi.rs` を削除する。
|
2025-12-02 09:45:54 +09:00
|
|
|
|
- 必要であれば、後続フェーズで hack_check 側も JoinIR/型ヒントラインに徐々に寄せていく(ただし現時点では「selfhost を先に Strict 化、hack_check は安定 VM ライン維持」を優先)。
|
|
|
|
|
|
|
2025-11-30 08:54:18 +09:00
|
|
|
|
### バックログ
|
|
|
|
|
|
|
2025-11-30 14:30:28 +09:00
|
|
|
|
- Stage‑B/selfhost smokes の扱い整理(Phase 30.1 フォロー)
|
|
|
|
|
|
- quick プロファイルで `stage1_launcher_*` / `phase251*` 系が Stage‑3 デフォルト環境で不安定。今後、quick では SKIP にするか、Stage‑B emit 抽出ロジックを安定化するかを決める。
|
2025-11-30 08:54:18 +09:00
|
|
|
|
- `MirFunction.blocks: HashMap` → `BTreeMap` で非決定的テスト解消
|
|
|
|
|
|
- Phase 25.1 同様のパターン適用
|
2025-12-02 14:07:19 +09:00
|
|
|
|
- selfhost Stage‑B 子プロセスへのソース渡し経路の簡素化(`--source "$SRC_CONTENT"` で argv を肥大化させず、HAKO_SRC 環境変数や一時ファイル経由に統一する設計を将来フェーズで検討)。
|
2025-11-28 12:02:52 +09:00
|
|
|
|
|
2025-12-01 11:10:46 +09:00
|
|
|
|
- Phase 71-SSA: Stage‑B / selfhost ラインは「SSA デバッグ用の観測窓」として切り出し、
|
|
|
|
|
|
代表パス(selfhost_build + stage1_run_min.hako)が JSON v0 emit まで通るかどうかを別フェーズで追う。
|
|
|
|
|
|
詳細: `docs/private/roadmap2/phases/phase-71-ssa-debug/README.md`
|
|
|
|
|
|
|
|
|
|
|
|
- Phase 81-JoinIR-Strict: JoinIR を「if/loop/PHI の真」として扱い、
|
|
|
|
|
|
JoinIR 対象関数では `if_phi` / `LoopBuilder` / 旧 MIR Builder にフォールバックしない Strict モードを導入する。
|
|
|
|
|
|
代表 If/Loop(mir_joinir_if_select / mir_stage1_staticcompiler_receiver / mir_joinir_stage1_using_resolver_min)は
|
|
|
|
|
|
`NYASH_JOINIR_CORE=1 NYASH_JOINIR_STRICT=1` で全て green を確認済み(Strict で lowering 失敗なし)。
|
|
|
|
|
|
代表パス(skip_ws / trim / resolve / print_tokens / filter / read_quoted / Stage‑1/Stage‑B 代表)では、
|
|
|
|
|
|
JoinIR lowering / VM ブリッジ失敗を即エラー扱いとし、レガシー経路は「未対応関数専用」に縮退させる。
|
|
|
|
|
|
|
2025-12-02 09:45:54 +09:00
|
|
|
|
- Phase 82-if-phi-retire(予定): P3-C ジェネリック型推論ラインを拡張し、
|
|
|
|
|
|
`lifecycle.rs` から `infer_type_from_phi*` 呼び出しを完全に排除する(P3-C まで GenericTypeResolver で食い切る)。
|
|
|
|
|
|
あわせて `collect_assigned_vars_via_joinir` を JoinIR/AST 側の分析モジュールに移動し、
|
|
|
|
|
|
`phi_core::if_phi` への実コードからの参照をゼロにした上で `if_phi.rs` 本体を削除する(歴史メモは docs 側にのみ保持)。
|
|
|
|
|
|
|
2025-12-02 14:07:19 +09:00
|
|
|
|
- Phase 74-SSA-static-delegation(将来フェーズ候補): Phase 71-SSA で判明した「static box 委譲時に ValueId マッピングが壊れる」
|
|
|
|
|
|
Rust MIR ビルダー側の根本バグを正式に修正するライン。
|
|
|
|
|
|
現 HEAD では `.hako` 層で ParserBox → ParserStringUtilsBox などの委譲を外すことで SSA undef は 13件→0件に根治しており、
|
|
|
|
|
|
最小 .hako ではバグを再現できないため、MIR Builder の修正は **再現用テストを用意できる将来フェーズに委譲**する。
|
|
|
|
|
|
当面は「box→static box への薄い委譲メソッドを増やさない」というコーディング規約で安全運用し、
|
|
|
|
|
|
Phase 74 では commit 13ce9e68 以前の形を元にした再現用テスト+MIR Builder 修正+委譲パターンの復活をまとめて扱う。
|
|
|
|
|
|
|
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 画面で把握できる軽さを維持する方針だよ。***
|