Phase47-B/C: extend P3 normalized shapes and quiet dev warnings

This commit is contained in:
nyash-codex
2025-12-12 07:13:34 +09:00
parent 7200309cc3
commit 386cbc1915
11 changed files with 503 additions and 73 deletions

View File

@ -1404,32 +1404,43 @@ Pattern3 (if-sum) ループを Normalized JoinIR に対応させる。P2 と同
- ✅ shape_guard に `Pattern3IfSumMinimal` を追加し、構造ベースで P3 最小 if-sum 形状を検出
- ✅ `normalize_pattern3_if_sum_minimal` を通じて P3 最小ケースを Normalized→MIR(direct) パイプラインに載せ、P1/P2 と同じ direct ブリッジで実行結果一致を確認dev-only
**Phase 47-B**: array_filter (dev-only, body-local + method calls)
**Phase 47-B**: Extended devsum+count / JsonParser if-sum mini
- ✅ フィクスチャ追加: `pattern3_if_sum_multi_min`sum+count/ `jsonparser_if_sum_min`JsonParser 由来)
- ✅ ShapeGuard: `Pattern3IfSumMulti` / `Pattern3IfSumJson` 追加、capability=P3IfSum
- ✅ Normalizer/Bridge: P3 if-sum multi/json を Structured→Normalized→MIR(direct) で dev A/BStructured と一致)
- ✅ VM Bridge テスト: `normalized_pattern3_if_sum_multi_vm_bridge_direct_matches_structured` / `normalized_pattern3_json_if_sum_min_vm_bridge_direct_matches_structured`
**Phase 47-C**: Canonical promotion (P3 minimal → canonical)
**Phase 47-C**: Canonical promotionP3 minimal/multi/json → canonical Normalized
- Canonical set 拡張: P3 if-sum minimal/multi/json を `is_canonical_shape()` に追加、mode/env 無視で Normalized→MIR(direct) ルートを使用
- Bridge/runner: canonical shapes は Structured fallback せず fail-fastdev logs は normalized-dev プレフィックスに統一)
**スコープ外**: P4 (continue) 対応NORM-P4 フェーズで実施、Complex P3 patterns後続フェーズ
### 3.25 Phase 48-NORM-P4 Normalized P4 (Continue) Design 📋 DESIGN PHASE (2025-12-12)
### 3.25 Phase 48-NORM-P4 Normalized P4 (Continue) 🏗️ DESIGN + PHASE 48-A MINIMAL DEV COMPLETE (2025-12-12)
**設計詳細**: [phase48-norm-p4-design.md](./phase48-norm-p4-design.md)
**設計詳細 / 実装サマリ**: [phase48-norm-p4-design.md](./phase48-norm-p4-design.md)
P4 (continue) will use the **same `loop_step(env, k_exit)` skeleton** as P1/P2/P3.
**Key insight**: `continue` = immediate `TailCallFn(loop_step, env', k_exit)` (skip to next iteration early), not a new instruction.
P4 (continue) は P1/P2/P3 と同じ `loop_step(env, k_exit)` 骨格を使う設計だよ。
**Key insight**: `continue` = 「更新済み Env での `TailCallFn(loop_step, env', k_exit)`」で表現できる(新しい命令種別は不要)。
**Target loops** (JsonParser):
- ◎ _parse_array (skip whitespace) - PRIMARY (Phase 48-A)
- ○ _parse_object (skip whitespace) - Extended
- △ _unescape_string, _parse_string - Later
- ◎ `_parse_array` (skip whitespace) PRIMARYPhase 48-A 対象)
- ○ `_parse_object` (skip whitespace) Extended
- △ `_unescape_string`, `_parse_string` Later
**Infrastructure reuse**: 95%+ of P2/P3 Normalized code works for P4
- Same: EnvLayout, ConditionEnv, CarrierInfo, ExitLine, JpInst
- New: `ContinueCheck` step kind in StepScheduleBox
**Infrastructure reuse**: P2/P3 Normalized の 95% 以上をそのまま再利用
- 共通: EnvLayout / ConditionEnv / CarrierInfo / ExitLine / JpInst
- 追加: StepScheduleBox に `ContinueCheck` step kind を追加
**Phase 48 doc is SSOT** for P4 Normalized design.
**Phase 48-AMinimal continue, dev-only実装ステータス**:
- Fixture: `pattern4_continue_min.program.json``i == 2` を `continue` でスキップする最小 P4 ループ)
- ShapeGuard: `NormalizedDevShape::Pattern4ContinueMinimal` を追加し、構造ベースで minimal continue 形状を検出
- StepSchedule: `HeaderCond → ContinueCheck → Updates → Tail` の順序を固定
- Normalized lowering: `normalize_pattern4_continue_minimal()` を実装し、P2 正規化ロジックを約 95% 再利用
- テスト:
- Normalized dev スイートに P4 minimal の比較テストを 4 本追加
Structured→Normalized→MIR(direct) vs Structured→MIR / runner / VM bridge
- `cargo test --release` ベースで **939/939 tests PASS**Phase 48-A 実装時点)
**Implementation phases**:
- Phase 48-A: Minimal continue (dev-only)
- Phase 48-B: Extended patterns (multi-carrier)
- Phase 48-C: Canonical promotion
**Phase 48 doc is SSOT** for P4 Normalized design + 48-A 実装サマリだよ。
Phase 48-Bmulti-carrier / string ops 拡張)と 48-Ccanonical 昇格)は今後のフェーズで扱う。