feat(joinir): Phase 53 - SELFHOST-NORM-DEV-EXPAND implementation
Expanded selfhost dev Normalized target with 2 practical P2/P3 loop variations, strengthened structural signature axis, and implemented two-stage detection. Key Changes: 1. Documentation (phase49-selfhost-joinir-depth2-design.md +128 lines): - Added Phase 53 section with candidate selection rationale - Documented two-stage detector strategy (structural primary + dev-only name guard) - Defined structural axis strengthening (carrier count/type, branch patterns) 2. Fixtures (+210 lines): - selfhost_args_parse_p2.program.json (60 lines): P2 with String carrier + conditional branching - selfhost_stmt_count_p3.program.json (150 lines): P3 with 5 carriers + multi-branch if-else 3. Structured Builders (fixtures.rs +48 lines): - build_selfhost_args_parse_p2_structured_for_normalized_dev() - build_selfhost_stmt_count_p3_structured_for_normalized_dev() 4. ShapeGuard Two-Stage Detection (shape_guard.rs +80 lines): - Added SelfhostArgsParseP2/SelfhostStmtCountP3 to NormalizedDevShape enum - Implemented is_selfhost_args_parse_p2(): P2 core family + name guard - Implemented is_selfhost_stmt_count_p3(): 2-10 carrier check + name guard - Updated capability_for_shape() mappings 5. Bridge Integration (bridge.rs +8 lines, normalized.rs +10 lines): - Added shape handlers delegating to existing normalizers - Added roundtrip reconstruction handlers 6. Entry Point Registration (ast_lowerer/mod.rs +2 lines): - Registered selfhost_args_parse_p2/selfhost_stmt_count_p3 as LoopFrontend routes 7. Dev VM Comparison Tests (normalized_joinir_min.rs +40 lines): - normalized_selfhost_args_parse_p2_vm_bridge_direct_matches_structured() - normalized_selfhost_stmt_count_p3_vm_bridge_direct_matches_structured() 8. Test Context Fix (dev_env.rs): - Added thread-local test context depth counter - Fixed deadlock in nested test_ctx() calls via reentrant with_dev_env_if_unset() Structural Axis Growth: P2 family: - Carrier count: 1-3 (unchanged) - NEW: Type diversity (Integer/String mixed) - NEW: Conditional branching patterns (Eq-heavy comparisons) P3 family: - NEW: Carrier count upper bound: 2-10 (was 2-4) - NEW: Multi-branch if-else (5+ branches with nested structure) - NEW: Complex conditional patterns Test Results: - normalized_dev: 40/40 PASS (including 2 new tests) - lib regression: 939 PASS, 56 ignored - Existing behavior unchanged (normalized_dev feature-gated) Phase 53 Achievements: ✅ P2/P3 each gained 1 practical variation (2 total) ✅ Two-stage detection: structural primary + dev-only name guard ✅ Structural axis expanded: 4 axes (carrier count/type/Compare/branch patterns) ✅ All tests PASS, no regressions ✅ Test context deadlock fixed (0.04s for 29 tests) Files Modified: 14 files Lines Added: ~516 lines (net) Implementation: Pure additive (feature-gated) Next Phase (54+): - Accumulate 6+ loops per P2/P3 family - Achieve 5+ stable structural axes - Target < 5% false positive rate - Then shrink/remove name guard scope
This commit is contained in:
@ -177,27 +177,45 @@
|
||||
- P3 if-sum を Normalized JoinIR に載せる設計。P2 と同じ ConditionEnv/CarrierInfo/ExitLine インフラを再利用。
|
||||
- Phase 47-A: Minimal sum_count(dev-only)として、`phase212_if_sum_min.hako` 相当の最小 if-sum ループを AST ベース lowerer + Structured→Normalized→Structured roundtrip(Runner 経路)+ Normalized→MIR(direct) で検証済み。
|
||||
- Phase 47-B 以降: array_filter など body-local/MethodCall を含む P3 ループや canonical 昇格は今後の実装フェーズで扱う。
|
||||
4. **Phase 48-NORM-P4(設計完了✅+48-A実装完了✅ 2025-12-12)**: Pattern4 (continue) Normalized 設計+minimal実装
|
||||
4. **Phase 48-NORM-P4(設計完了✅+48-A/B/C canon 完了✅ 2025-12-12→2026-01-XX)**: Pattern4 (continue) Normalized 設計+実装
|
||||
- 設計詳細: [phase48-norm-p4-design.md](docs/development/current/main/phase48-norm-p4-design.md)
|
||||
- ターゲットループ決定: _parse_array skip whitespace(◎ PRIMARY)、_parse_object(○)、_unescape_string/parse_string(△)
|
||||
- 設計骨格: `continue` = 即座の `TailCallFn(loop_step, ...)` (新命令不要)
|
||||
- P1/P2/P3 と同じ `loop_step(env, k_exit)` 骨格に載せる
|
||||
- インフラ再利用率: 95%+ (StepKind の ContinueCheck のみ追加)
|
||||
- **Phase 48-A実装(minimal dev-only)完了✅**:
|
||||
- P4 minimal フィクスチャ追加(skip i==2 パターン、単一 carrier `acc`)
|
||||
- ShapeGuard: Pattern4ContinueMinimal 検出器実装(構造ベース)
|
||||
- **Phase 48-A実装(minimal dev-only)完了✅** / **Phase 48-B dev(JsonParser skip_ws continue)完了✅**:
|
||||
- P4 minimal フィクスチャ追加(skip i==2 パターン、単一 carrier `acc`)+ JsonParser continue skip_ws (array/object) フィクスチャを追加
|
||||
- ShapeGuard: Pattern4ContinueMinimal + JsonParser continue 形状を検出
|
||||
- StepScheduleBox: ContinueCheck step 追加(評価順序: HeaderCond → ContinueCheck → Updates → Tail)
|
||||
- normalize_pattern4_continue_minimal() 実装(P2 委譲、95%インフラ再利用)
|
||||
- テスト完備: 4つの integration tests(normalization/runner/VM Bridge 比較×2)
|
||||
- 939/939 tests PASS(目標938超過達成!)
|
||||
- 次ステップ: Phase 48-B (extended multi-carrier) → 48-C (canonical promotion)
|
||||
- normalize_pattern4_continue_minimal()/jsonparser_*continue* を dev 正規化に配線(P2 インフラを再利用)
|
||||
- テスト完備: minimal + JsonParser continue の VM bridge 比較を normalized_dev スイートで固定
|
||||
- **Phase 48-C(canonical 昇格)完了✅**:
|
||||
- P4 minimal + JsonParser skip_ws array/object を canonical set に追加(env OFF でも Normalized→MIR(direct) を強制)
|
||||
- Bridge/runner で Structured fallback を禁止、fail-fast 契約に統一
|
||||
- canonical ルートと Structured 直経路の stdout 一致を比較するテストを追加
|
||||
5. JsonParser 残りループへの JoinIR 展開
|
||||
- `_parse_array` / `_parse_object` / `_unescape_string` / 本体 `_parse_string` など。
|
||||
- 既存の P2/P3/P4+P5 パイプラインをどこまで延ばせるかを docs 側で設計 → コード側はその設計に沿って小さく実装。
|
||||
6. selfhost depth‑2 ラインの再開
|
||||
- `.hako` 側で Program/MIR JSON を読んで JoinIR/MIR/VM/LLVM に流すライン。
|
||||
- JsonParser 側のカバレッジが上がったあとに、小さいループから順に移植する。
|
||||
7. JoinIR Verify / 最適化まわり
|
||||
6. **Phase 49-SELFHOST-NORM-DEPTH2(設計・コードなし)**: selfhost depth2 Normalized 設計フェーズ
|
||||
- 設計詳細: [phase49-selfhost-joinir-depth2-design.md](docs/development/current/main/phase49-selfhost-joinir-depth2-design.md)
|
||||
7. **Phase 50-SELFHOST-NORM-DEV(dev-only)完了✅ 2025-12-12**: selfhost 軽量 P2/P3 を dev Normalized パイプラインに載せる足慣らし
|
||||
- 対象: `selfhost_token_scan_p2` / `selfhost_if_sum_p3`
|
||||
- fixtures / ShapeGuard(Selfhost* 系) / VM bridge 比較テストまで整備し、Structured 直経路と一致を固定。
|
||||
8. **Phase 51-SELFHOST-NORM-DEV-EXTEND(dev-only)完了✅ 2025-12-12**: selfhost 実戦寄り P2/P3 を dev Normalized に追加
|
||||
- 対象: `selfhost_token_scan_p2_accum` / `selfhost_if_sum_p3_ext`
|
||||
- Phase 50 と同導線で fixtures / shape / 比較テストを追加し、selfhost 断面で緑を維持。
|
||||
9. **Phase 52-SELFHOST-SHAPE-STRUCT-SIGNATURE(dev-only)完了✅ 2025-12-12**: selfhost shape の構造シグネチャ育成
|
||||
- selfhost P2/P3 を「構造一次判定→dev-only name ガード最終確定」の二段 detector に移行。
|
||||
- 構造シグネチャの安定テストを追加し、name ガード撤去の足場を SSOT に固定。
|
||||
10. **Phase 53-SELFHOST-NORM-DEV-EXPAND(dev-only)完了✅ 2025-12-12**: selfhost P2/P3 の実戦寄り形状を追加
|
||||
- 対象追加: P2 `args_parse_p2` / P3 `stmt_count_p3`
|
||||
- 構造一次判定(carrier 数/型/Compare/branch)→ dev-only name 最終確定の二段 detector を拡張。
|
||||
- P3 carrier 上限を 2–10 に拡大し、複雑 if-else 形状を selfhost 群として取り込んだ。
|
||||
- `normalized_dev` selfhost 断面/回帰テストが緑、既定挙動は不変。
|
||||
11. **Phase 54-SELFHOST-SHAPE-GROWTH(次のフォーカス候補・dev-only)**: 構造軸の追加育成と name ガード範囲縮小の準備
|
||||
- selfhost P2/P3 を各 1〜2 本ずつ追加し、構造シグネチャ軸(型多様性/Compare 配列/分岐構造など)を 5+ へ育てる。
|
||||
- 偽陽性のログ/テストを見ながら、name ガードの適用を「最終確定が必要な形状だけ」に限定していく。
|
||||
12. JoinIR Verify / 最適化まわり
|
||||
- すでに PHI/ValueId 契約は debug ビルドで検証しているので、
|
||||
必要なら SSA‑DFA や軽い最適化(Loop invariant / Strength reduction)を検討。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user