Phase47-B/C: extend P3 normalized shapes and quiet dev warnings
This commit is contained in:
@ -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 dev(sum+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/B(Structured と一致)
|
||||
- ✅ 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 promotion(P3 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-fast(dev 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) – PRIMARY(Phase 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-A(Minimal 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-B(multi-carrier / string ops 拡張)と 48-C(canonical 昇格)は今後のフェーズで扱う。
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# Phase 47: Normalized P3 (If-Sum) Design
|
||||
|
||||
**Status**: Design Complete, Minimal Dev Test Implemented
|
||||
**Date**: 2025-12-12
|
||||
**Status**: Design Complete, Minimal → Extended Dev → Canonical (P3 Core) 実装中
|
||||
**Date**: 2025-12-21
|
||||
|
||||
## Goal
|
||||
|
||||
@ -127,27 +127,17 @@ loop(i < n) {
|
||||
- EnvLayout: `{ i: int, sum: int, count: int }`
|
||||
- StepSchedule: `[HeaderCond(i < n), IfCond(i % 2 == 1), ThenUpdates(sum, count), Updates(i), Tail]`
|
||||
|
||||
### Phase 47-B: JsonParser array_filter
|
||||
### Phase 47-B: Extended dev targets(今回の範囲)
|
||||
|
||||
**Example**: JsonParser `array_filter` (if present in codebase)
|
||||
| Fixture | Carriers / Params | 条件式 | EnvLayout 期待 |
|
||||
|---------|------------------|--------|----------------|
|
||||
| `pattern3_if_sum_multi_min` | `i`, `sum`, `count` | `i > 0` | `i, sum, count, len` |
|
||||
| `jsonparser_if_sum_min` | `i`, `sum` | `i > 0`(JsonParser 由来の簡約形) | `i, sum, len` |
|
||||
|
||||
```nyash
|
||||
local out = new ArrayBox()
|
||||
local i = 0
|
||||
|
||||
loop(i < arr.length()) {
|
||||
local v = arr.get(i)
|
||||
if (predicate(v)) {
|
||||
out.push(v)
|
||||
}
|
||||
i = i + 1
|
||||
}
|
||||
```
|
||||
|
||||
**Characteristics**:
|
||||
- Method calls: `arr.length()`, `arr.get(i)`, `out.push(v)`
|
||||
- Body-local: `v` (used in if condition)
|
||||
- Conditional side effect: `out.push(v)`
|
||||
特徴:
|
||||
- どちらも if/else を持ち、Else は no-op(Select/If PHI を確実に通すため)
|
||||
- MethodCall は含めず、まずは条件+複数キャリア更新に絞った dev 拡張
|
||||
- P3 if-sum capability (= P3IfSum) に乗せ、Structured→Normalized→MIR(direct) で A/B 比較する
|
||||
|
||||
**Complexity**: Higher than sum_count (method calls, body-local)
|
||||
|
||||
@ -171,10 +161,16 @@ Complex P3 patterns from selfhost compiler (deferred to later phase).
|
||||
- ✅ Runner / VM tests: P3 minimal について Structured 経路と Normalized→MIR(direct) 経路が一致することを dev-only スイートで確認
|
||||
- ✅ 938/938 tests PASS(退行なし)
|
||||
|
||||
**Next Phase**(Phase 47-B 以降):
|
||||
- array_filter など body-local + method call を含む P3 ループへの適用
|
||||
- multi-carrier if-sum(sum + count)や JsonParser 由来 P3 への拡張
|
||||
- Canonical 昇格(P3 minimal を dev-only から常時 Normalized 経路へ)
|
||||
**Phase 47-B (✅ Extended dev)**:
|
||||
- Fixture 拡張: `pattern3_if_sum_multi_min.program.json`(sum+count) / `jsonparser_if_sum_min.program.json` を normalized_dev フィクスチャに追加
|
||||
- ShapeGuard: `Pattern3IfSumMulti` / `Pattern3IfSumJson` 追加、capability=P3IfSum
|
||||
- Normalizer/Bridge: P3 if-sum multi/json を Structured→Normalized→MIR(direct) で dev 実行、Structured と一致
|
||||
- Tests: `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 化)**:
|
||||
- P3 if-sum minimal/multi/json を canonical Normalized セットに昇格(mode/env に関わらず direct ルート)
|
||||
- Bridge/runner は P2 と同様に P3 を常時 Normalized→MIR(direct) へルーティング
|
||||
- Docs/overview を canonical セット拡張に合わせて更新
|
||||
|
||||
## Implementation Strategy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user