Files
hakorune/CURRENT_TASK.md

139 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Current Task
このファイルは「いま何に集中しているか」と「次にやり得る候補」だけを書く軽量ビューだよ。
詳細なログや過去フェーズの記録は `docs/development/current/main/` 以下の各 `phase-*.md`
`docs/development/current/main/joinir-architecture-overview.md` を真実のソースとして扱うよ。
---
## 🎯 今フォーカスしているテーマ2025-12-10 時点のスナップショット)
### 0. JoinIR / ExprLowerer / Pattern24 + JsonParser `_parse_number` / DigitPos ラインPhase 230247-EX 完了)✅
- Pattern14while / break / ifPHI / continue P5(Trim) でループ lowering を JoinIR 経路に一本化。
- Phase 231/236/240-EX:
- Pattern2 の header / break 条件を ExprLowerer/ScopeManager 経由(対応パターンのみ)で本番導線化。
- ConditionEnv ベースの意味論と RC/JoinIR 構造が一致することをテストとカタログで確認済み。
- Phase 237238-EX:
- JsonParser/selfhost の条件パターンをカタログ化し、ExprLowerer/ScopeManager/ConditionEnv の責務境界を docs/README で固定。
- Phase 241242-EX:
- array_filter 系 3 FAIL を「構造で」解消hardcode `"sum"` チェック削除、CarrierInfo/ExitMeta 経由に統一)。
- Pattern3 ifsum / Pattern4 continue から legacy lowerer と by-name `"sum"`/`"count"` を完全削除。
- 複雑条件(`i % 2 == 1`)を ConditionPattern/if-sum lowerer で安全に扱えるよう整理Fail-Fast + テスト付き)。
- Phase 243244-EX:
- Pattern3/4 の公開 API を `can_lower + lower` の最小セットに整理し、内部 helper を箱の中に閉じた。
- `loop_pattern_detection` の classify() が代表ループを P1〜P4 に分類することをユニットテストで固定。
- Phase 245-EX / 245C:
- `_parse_number` のループについて、ループ変数 `p` の header/break 条件と `p = p + 1` 更新を Pattern2 + ExprLowerer 経路に載せて本番化num_str は未導入)。
- FunctionScopeCapture / CapturedEnv を拡張し、関数パラメータ(例: `s`, `len`)をループ条件/本体で読み取り専用なら CapturedEnv 経由で ConditionEnv に載せるようにした。
- これにより、`p < s.length()` のような header 条件や JsonParser 系ループでのパラメータ参照が、ExprLowerer/ScopeManager から安全に解決される。
- Phase 247-EX:
- DigitPos promotion を二重値化し、`digit_pos` から boolean carrier `is_digit_pos`ConditionOnlyと integer carrier `digit_value`LoopStateを生成。
- UpdateEnv で `digit_pos` 解決時に `digit_value` を優先し、NumberAccumulation`result = result * 10 + digit_pos`)と break 条件の両方で DigitPos パターンが安全に利用可能に。
- 現在: `cargo test --release --lib` で 931/931 テスト PASS既知 FAIL なし)。
- Phase 28-NORM-P2dev-only:
- Normalized JoinIR のミニ実装を Pattern1 に続き Pattern2 最小ケースまで拡張Structured→Normalized→Structured を比較)。
- 対応外の Structured JoinModule では normalize_pattern2_minimal が Fail-Fast するようガードを追加し、normalized_dev テストで固定。
- Phase 29-NORM-P2-APPLYdev-only:
- Phase 34 の break fixturei/acc/n の単純 break ループ)を Structured→Normalized→Structured の往復に通し、VM 実行結果が Structured 直経路と一致することを dev テストで固定。
- ガードは 3 パラメータまで緩和しつつ、DigitPos/Trim などの重いキャリアはまだ非対応のまま。
- Phase 30-NORM-P2-DEV-RUNdev-only:
- JoinIR runner に `NYASH_JOINIR_NORMALIZED_DEV_RUN=1` を追加し、Pattern1/2 ミニケースだけ Structured→Normalized→Structured を挟んで dev 実行できるようにした(`normalized_dev` + debug 限定。通常経路Structured→MIRは不変。
- Phase 31-NORM-JP-MINIdev-only:
- JsonParser 系のシンプルな P2 ループskip_whitespace ミニ fixtureを Structured→Normalized→Structured 経由でも実行し、runner dev スイッチの比較テストで Structured 直経路と一致することを固定。
- Phase 32-NORM-CANON-PREPdev-only:
- JoinIR→MIR ブリッジの入口を `bridge_joinir_to_mir` に一本化し、normalized_dev スイッチfeature + envで Structured→Normalized→Structured の dev roundtrip を切り替える準備を整えた。P1/P2/JP mini の比較テストも VM ブリッジ経路で追加。
- Phase 33-NORM-CANON-TESTdev-only:
- P1/P2Phase 34 break fixture/JsonParser skip_ws mini について、normalized_dev ON 時は shape_guard 経由で必ず Normalized roundtrip を通すようブリッジと runner を固めた。normalized_joinir_min.rs の runner/VM 比較テストを拡張し、Normalized が壊れたら dev スイートが必ず赤になるようにした(本番 CLI は従来どおり Structured→MIR
### 1. いまコード側で意識しておきたいフォーカス
- JoinIR ループ基盤Pattern14 + ExprLowerer + ScopeManager + CapturedEnvは一応の完成状態に入ったので、当面は:
- 既存パターン/箱の範囲内での **バグ修正・FailFast/invariant 追加・テスト強化** を優先する。
- JsonParser/selfhost への新しい適用や大きな仕様拡張は、docs 側で Phase 設計が固まってからコード側に持ち込む。
- 直近のコード側フォーカス候補:
- Phase 246-EXコード: JsonParser `_atoi` のループを Pattern2 + NumberAccumulation + DigitPos 二重値インフラ上に載せる。
- header/break 条件を ExprLowerer/ConditionEnv/FunctionScopeCapture 経由で JoinIR に lower。
- `result = result * 10 + digit_pos` を NumberAccumulation + `digit_value` carrier で扱い、従来の意味論を E2E テストで固定する。
- Pattern14 / ExprLowerer / ScopeManager まわりで、by-name ハードコードやサイレントフォールバックが見つかった場合は、
CarrierInfo / ConditionEnv / Scope 情報を使って「構造で」直す。
### 2. 直近で意識しておきたい設計の芯
- **Loop パターン空間**は有限で整理済み:
- P1: Simple While
- P2: Break
- P3: IfPHI単一/複数キャリア)
- P4: Continuethen/elsecontinue 正規化込み)
- P5: LoopBodyLocal 昇格Trim/JsonParser 用の部分適用)
- 「増やすべき」は新しい Pattern ではなく、既存 Pattern の前処理箱:
- BoolExprLowerer / ConditionEnv / LoopConditionScopeBox / LoopBodyCarrierPromoter /
TrimLoopHelper / ComplexAddendNormalizer / LoopBodyLocalEnv / UpdateEnv などで
条件式とキャリア更新を吸収し、Pattern14 は「ループ骨格」に専念させる方針。
- FailFast 原則:
- JoinIR 以外のループ lowering パスは存在しないLoopBuilder は削除済み)。
- 「わからないパターン」は必ず `[joinir/freeze]` 系の明示エラーにして、サイレントフォールバックはしない。
---
## ✅ 最近まとまった大きな塊(超要約)
ここ半年くらいで終わっている主な塊だけをざっくり書くね。
細かいタスク・バグ票・議論は `docs/development/current/main/phase-*.md`
`docs/development/current/main/joinir-architecture-overview.md` に全部残っているので、必要になったときだけそちらを読む想定。
- **LoopBuilder 削除ラインPhase 180 前後)**
- LoopBuilder を devonly → hard freeze → 物理削除まで完了。
- Loop lowering の SSOT を JoinIR に一本化。
- **LoopPattern / Router ラインPhase 170179, 244-EX**
- LoopFeatures / LoopPatternKind / PatternRouter / PatternPipelineContext を整備。
- Pattern14 の検出・ルーティングを「構造ベースAST features」で統一関数名ベタ書き依存を除去
- Phase 244-EX で代表ループP1〜P4の classify() 結果をユニットテストで固定。
- **Exit / Boundary / ValueId ラインPhase 172205**
- ExitMeta / ExitLineReconnector / JoinInlineBoundary(+Builder) / LoopHeaderPhiBuilder を箱化。
- JoinValueSpaceParam/Local 領域)+ PHI 契約 Verifier で ValueId 衝突と PHI 破損を根治。
- **P5(Trim/JsonParser) ラインPhase 171176, 173175, 190193**
- LoopBodyLocal 昇格パイプラインTrim, `_skip_whitespace`, `_parse_string` 簡易版)を構築。
- StringAppend / NumberAccumulation / Complex addend 正規化など、更新式まわりの箱を揃えた。
- **P3/P4 (IfPHI / Continue) 汎用化ラインPhase 195196, 212215, 220242-EX**
- multicarrier P3 の JoinIR 生成を整理し、ifsum 最小パターンを AST ベースで一般化sum+count まで無改造対応)。
- Pattern3/4 ifsum/continue lowerer を分離箱にして、legacy PoC lowerer と by-name ハードコード(`"sum"`, `"count"`)を削除。
- Pattern4CarrierAnalyzer を純粋な「キャリア解析箱」として仕上げ、continue 正規化・更新式解析をユニットテストで固定。
このあたりが「JoinIR ループ基盤の芯」で、以降の Phase は JsonParser/selfhost の各ループへの適用フェーズ、という位置づけだよ。
---
## 🧭 これからの候補(まだ「やる」とは決めていないメモ)
ここは「やることリスト」ではなく「今後やるとしたらこの辺」というメモだよ。
実際に着手するタイミングで、別途 Phase/タスクを切る想定。
1. Phase 245Bコード: JsonParser `_parse_number``num_str` を LoopState carrier として Pattern2/P5 ラインに統合
- UpdateExpr で `num_str = num_str + ch` 1 形だけを許可し、StringAppend 経路で JoinIR に落とす。
- ExitMeta/JoinIR/E2E テストで num_str/p/戻り値の意味論を従来どおり固定する。
2. Phase 246-EXコード: JsonParser `_atoi` を Pattern2 + NumberAccumulation ラインに統合
- `_atoi` のループを Pattern2 detect → Pattern2 lowerer に接続し、DigitPos 二重値 + NumberAccumulation で数値更新を扱う。
- JsonParser の `_atoi` 呼び出しテスト(既存 or 追加で、JoinIR 経路でも従来どおりのパース結果になることを固定する。
3. JsonParser 残りループへの JoinIR 展開
- `_parse_array` / `_parse_object` / `_unescape_string` / 本体 `_parse_string` など。
- 既存の P2/P3/P4P5 パイプラインをどこまで延ばせるかを docs 側で設計 → コード側はその設計に沿って小さく実装。
4. selfhost depth2 ラインの再開
- `.hako` 側で Program/MIR JSON を読んで JoinIR/MIR/VM/LLVM に流すライン。
- JsonParser 側のカバレッジが上がったあとに、小さいループから順に移植する。
5. JoinIR Verify / 最適化まわり
- すでに PHI/ValueId 契約は debug ビルドで検証しているので、
必要なら SSADFA や軽い最適化Loop invariant / Strength reductionを検討。
---
## 📎 このファイルの運用ルール(自分向けメモ)
- 過去フェーズの詳細な ToDo/Done リストは **CURRENT_TASK には書かない**
代わりに `docs/development/current/main/phase-*.md``joinir-architecture-overview.md` を SSOT として維持する。
- CURRENT_TASK は「あくまで最新のフォーカスと次の候補だけ」に絞る。
目安として **このファイル自体は 2〜3画面程度〜300行以内** に収める。
- 新しい大フェーズを始めたら:
1. まず docs 配下に `phase-XXX-*.md` を書く。
2. CURRENT_TASK には「そのフェーズの一行要約」と「今のフォーカスかどうか」だけを書く。