2025-12-04 14:19:48 +09:00
|
|
|
|
# Current Task
|
|
|
|
|
|
|
2025-12-10 01:40:18 +09:00
|
|
|
|
このファイルは「いま何に集中しているか」と「次にやり得る候補」だけを書く軽量ビューだよ。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
詳細なログや過去フェーズの記録は `docs/development/current/main/` 以下の各 `phase-*.md` と
|
|
|
|
|
|
`docs/development/current/main/joinir-architecture-overview.md` を真実のソースとして扱うよ。
|
2025-12-04 10:52:10 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-10 22:48:45 +09:00
|
|
|
|
## 🎯 今フォーカスしているテーマ(2025-12-10 時点のスナップショット)
|
|
|
|
|
|
|
2025-12-11 13:13:08 +09:00
|
|
|
|
### 0. JoinIR / ExprLowerer / Pattern2–4 ライン(Phase 230–244 完了)✅
|
|
|
|
|
|
|
|
|
|
|
|
- Pattern1–4(while / break / if‑PHI / continue)+ P5(Trim) でループ lowering を JoinIR 経路に一本化。
|
|
|
|
|
|
- Phase 231/236/240-EX:
|
|
|
|
|
|
- Pattern2 の header / break 条件を ExprLowerer/ScopeManager 経由(対応パターンのみ)で本番導線化。
|
|
|
|
|
|
- ConditionEnv ベースの意味論と RC/JoinIR 構造が一致することをテストとカタログで確認済み。
|
|
|
|
|
|
- Phase 237–238-EX:
|
|
|
|
|
|
- JsonParser/selfhost の条件パターンをカタログ化し、ExprLowerer/ScopeManager/ConditionEnv の責務境界を docs/README で固定。
|
|
|
|
|
|
- Phase 241–242-EX:
|
|
|
|
|
|
- array_filter 系 3 FAIL を「構造で」解消(hardcode `"sum"` チェック削除、CarrierInfo/ExitMeta 経由に統一)。
|
|
|
|
|
|
- Pattern3 if‑sum / Pattern4 continue から legacy lowerer と by-name `"sum"`/`"count"` を完全削除。
|
|
|
|
|
|
- 複雑条件(`i % 2 == 1`)を ConditionPattern/if-sum lowerer で安全に扱えるよう整理(Fail-Fast + テスト付き)。
|
|
|
|
|
|
- Phase 243–244-EX:
|
|
|
|
|
|
- Pattern3/4 の公開 API を `can_lower + lower` の最小セットに整理し、内部 helper を箱の中に閉じた。
|
|
|
|
|
|
- `loop_pattern_detection` の classify() が代表ループを P1〜P4 に分類することをユニットテストで固定。
|
|
|
|
|
|
- 現在: `cargo test --release --lib` で 909/909 テスト PASS(既知 FAIL なし)。
|
|
|
|
|
|
|
|
|
|
|
|
### 1. いまコード側で意識しておきたいフォーカス
|
|
|
|
|
|
|
|
|
|
|
|
- JoinIR ループ基盤(Pattern1–4 + ExprLowerer + ScopeManager)は一応の完成状態に入ったので、当面は:
|
|
|
|
|
|
- 既存パターン/箱の範囲内での **バグ修正・Fail‑Fast/invariant 追加・テスト強化** を優先する。
|
|
|
|
|
|
- JsonParser/selfhost への新しい適用や大きな仕様拡張は、docs 側で Phase 設計が固まってからコード側に持ち込む。
|
|
|
|
|
|
- コード側の短期フォーカス例:
|
|
|
|
|
|
- Pattern1–4 / ExprLowerer / ScopeManager まわりで、by-name ハードコードやサイレントフォールバックが見つかった場合は、
|
|
|
|
|
|
CarrierInfo / ConditionEnv / Scope 情報を使って「構造で」直す。
|
|
|
|
|
|
- Router / lowerer の要所(あり得ない PatternKind の組み合わせなど)に `debug_assert!` を追加し、
|
|
|
|
|
|
**挙動を変えない安全側の強化**を段階的に進める。
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 直近で意識しておきたい設計の芯
|
2025-12-10 01:40:18 +09:00
|
|
|
|
|
|
|
|
|
|
- **Loop パターン空間**は有限で整理済み:
|
|
|
|
|
|
- P1: Simple While
|
|
|
|
|
|
- P2: Break
|
|
|
|
|
|
- P3: If‑PHI(単一/複数キャリア)
|
|
|
|
|
|
- P4: Continue(then/else‑continue 正規化込み)
|
|
|
|
|
|
- P5: LoopBodyLocal 昇格(Trim/JsonParser 用の部分適用)
|
|
|
|
|
|
- 「増やすべき」は新しい Pattern ではなく、既存 Pattern の前処理箱:
|
|
|
|
|
|
- BoolExprLowerer / ConditionEnv / LoopConditionScopeBox / LoopBodyCarrierPromoter /
|
|
|
|
|
|
TrimLoopHelper / ComplexAddendNormalizer / LoopBodyLocalEnv / UpdateEnv などで
|
|
|
|
|
|
条件式とキャリア更新を吸収し、Pattern1–4 は「ループ骨格」に専念させる方針。
|
|
|
|
|
|
- Fail‑Fast 原則:
|
|
|
|
|
|
- JoinIR 以外のループ lowering パスは存在しない(LoopBuilder は削除済み)。
|
|
|
|
|
|
- 「わからないパターン」は必ず `[joinir/freeze]` 系の明示エラーにして、サイレントフォールバックはしない。
|
2025-12-04 12:06:34 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-10 01:40:18 +09:00
|
|
|
|
## ✅ 最近まとまった大きな塊(超要約)
|
|
|
|
|
|
|
|
|
|
|
|
ここ半年くらいで終わっている主な塊だけをざっくり書くね。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
細かいタスク・バグ票・議論は `docs/development/current/main/phase-*.md` と
|
|
|
|
|
|
`docs/development/current/main/joinir-architecture-overview.md` に全部残っているので、必要になったときだけそちらを読む想定。
|
2025-12-10 01:40:18 +09:00
|
|
|
|
|
|
|
|
|
|
- **LoopBuilder 削除ライン(Phase 180 前後)**
|
|
|
|
|
|
- LoopBuilder を dev‑only → hard freeze → 物理削除まで完了。
|
|
|
|
|
|
- Loop lowering の SSOT を JoinIR に一本化。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
- **LoopPattern / Router ライン(Phase 170–179, 244-EX)**
|
2025-12-10 01:40:18 +09:00
|
|
|
|
- LoopFeatures / LoopPatternKind / PatternRouter / PatternPipelineContext を整備。
|
|
|
|
|
|
- Pattern1–4 の検出・ルーティングを「構造ベース+AST features」で統一(関数名ベタ書き依存を除去)。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
- Phase 244-EX で代表ループ(P1〜P4)の classify() 結果をユニットテストで固定。
|
2025-12-10 01:40:18 +09:00
|
|
|
|
- **Exit / Boundary / ValueId ライン(Phase 172–205)**
|
|
|
|
|
|
- ExitMeta / ExitLineReconnector / JoinInlineBoundary(+Builder) / LoopHeaderPhiBuilder を箱化。
|
|
|
|
|
|
- JoinValueSpace(Param/Local 領域)+ PHI 契約 Verifier で ValueId 衝突と PHI 破損を根治。
|
|
|
|
|
|
- **P5(Trim/JsonParser) ライン(Phase 171–176, 173–175, 190–193)**
|
|
|
|
|
|
- LoopBodyLocal 昇格パイプライン(Trim, `_skip_whitespace`, `_parse_string` 簡易版)を構築。
|
|
|
|
|
|
- StringAppend / NumberAccumulation / Complex addend 正規化など、更新式まわりの箱を揃えた。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
- **P3/P4 (If‑PHI / Continue) 汎用化ライン(Phase 195–196, 212–215, 220–242-EX)**
|
|
|
|
|
|
- multi‑carrier P3 の JoinIR 生成を整理し、if‑sum 最小パターンを AST ベースで一般化(sum+count まで無改造対応)。
|
|
|
|
|
|
- Pattern3/4 if‑sum/continue lowerer を分離箱にして、legacy PoC lowerer と by-name ハードコード(`"sum"`, `"count"`)を削除。
|
|
|
|
|
|
- Pattern4CarrierAnalyzer を純粋な「キャリア解析箱」として仕上げ、continue 正規化・更新式解析をユニットテストで固定。
|
2025-12-10 01:40:18 +09:00
|
|
|
|
|
|
|
|
|
|
このあたりが「JoinIR ループ基盤の芯」で、以降の Phase は JsonParser/selfhost の各ループへの適用フェーズ、という位置づけだよ。
|
2025-12-04 12:06:34 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-10 01:40:18 +09:00
|
|
|
|
## 🧭 これからの候補(まだ「やる」とは決めていないメモ)
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-11 13:13:08 +09:00
|
|
|
|
ここは「やることリスト」ではなく「今後やるとしたらこの辺」というメモだよ。
|
|
|
|
|
|
実際に着手するタイミングで、別途 Phase/タスクを切る想定。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-11 13:13:08 +09:00
|
|
|
|
1. JsonParser 残りループへの JoinIR 展開(設計フェーズ優先)
|
2025-12-10 01:40:18 +09:00
|
|
|
|
- `_parse_array` / `_parse_object` / `_unescape_string` / 本体 `_parse_string` など。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
- 既存の P2/P3/P4+P5 パイプラインをどこまで延ばせるかを docs 側で設計 → コード側はその設計に沿って小さく実装。
|
2025-12-10 01:40:18 +09:00
|
|
|
|
2. selfhost depth‑2 ラインの再開
|
|
|
|
|
|
- `.hako` 側で Program/MIR JSON を読んで JoinIR/MIR/VM/LLVM に流すライン。
|
|
|
|
|
|
- JsonParser 側のカバレッジが上がったあとに、小さいループから順に移植する。
|
|
|
|
|
|
3. JoinIR Verify / 最適化まわり
|
|
|
|
|
|
- すでに PHI/ValueId 契約は debug ビルドで検証しているので、
|
2025-12-11 13:13:08 +09:00
|
|
|
|
必要なら SSA‑DFA や軽い最適化(Loop invariant / Strength reduction)を検討。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
2025-12-07 21:43:08 +09:00
|
|
|
|
|
2025-12-10 01:40:18 +09:00
|
|
|
|
## 📎 このファイルの運用ルール(自分向けメモ)
|
|
|
|
|
|
|
|
|
|
|
|
- 過去フェーズの詳細な ToDo/Done リストは **CURRENT_TASK には書かない**。
|
2025-12-11 13:13:08 +09:00
|
|
|
|
代わりに `docs/development/current/main/phase-*.md` と `joinir-architecture-overview.md` を SSOT として維持する。
|
2025-12-10 01:40:18 +09:00
|
|
|
|
- CURRENT_TASK は「あくまで最新のフォーカスと次の候補だけ」に絞る。
|
|
|
|
|
|
目安として **このファイル自体は 2〜3画面程度(〜300行以内)** に収める。
|
|
|
|
|
|
- 新しい大フェーズを始めたら:
|
|
|
|
|
|
1. まず docs 配下に `phase-XXX-*.md` を書く。
|
|
|
|
|
|
2. CURRENT_TASK には「そのフェーズの一行要約」と「今のフォーカスかどうか」だけを書く。
|
2025-12-10 22:48:45 +09:00
|
|
|
|
|