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 昇格)は今後のフェーズで扱う。

View File

@ -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-opSelect/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-sumsum + 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