Files
hakorune/docs/development/current/main/10-Now.md
nyash-codex 5b5f3b55d4 docs: Phase 88-89 完了 + Phase 90 P0 追加
## CURRENT_TASK.md
- Phase 88-89 完了を反映
- Phase 90 P0 追加(_parse_string 合成 fixture)
- P1/P2 候補を Phase 91/92 に繰り上げ
- 最終更新: 2025-12-14

## 10-Now.md
- Phase 88 到達点を追記(continue + 可変ステップ)
- Phase 89 P0/P1 到達点を追記(ContinueReturn detector + lowering)
- 未検証の断定は書かない(dev-only fixture で固定、と明記)

Impact:
- 正確な進捗記録
- Phase 90 の明確な方針(fixture → detector → lowering)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-14 02:31:39 +09:00

190 lines
9.2 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.

# Self Current Task — Now (main)
## 20251206現状サマリ
### JoinIR / Loop / If ライン
- LoopBuilder は Phase 186187 で完全削除済み。**JoinIR が唯一の loop lowering 経路**。
- LoopPattern 系は Pattern14 まで実装・本線化済み:
- Pattern1: Simple While
- Pattern2: Loop with Break
- Pattern3: Loop with IfElse PHIbreak/continue なし)
- Pattern4: Loop with Continuemulticarrier 対応)
- Exit/Carrier/Boundary ラインは次の箱で SSOT 化:
- `CarrierInfo` / `ExitMeta` / `ExitBindingBuilder`
- `JoinInlineBoundary` + `LoopExitBinding`
- If lowering は IfSelectLowerer/IfMergeLowerer を中心に整理済み。Select/PHI の扱いも Phase 189 系で橋渡し済み。
- 残課題JoinIR ライン):
- JoinIR→MIR merge の一般化(複雑な Select/PHI パターンの統合)
- JsonParserBox など実アプリ側での長期運用テスト
### Phase 86: Carrier Init Builder + Error Tags (2025-12-13) ✅
**Status**: COMPLETE - SSOT 確立完了
**Achievements**:
- Carrier Initialization Builder: CarrierInit → ValueId 生成を単一関数化 (carrier_init_builder.rs, +8 tests)
- Error Message Centralization: JoinIR エラータグを SSOT 化 (error_tags.rs, +5 tests)
- DebugOutputBox Migration: 全 JOINIR_DEBUG 使用箇所を DebugOutputBox に統一
**Impact**:
- Tests: 987/987 PASS (+13 unit tests from Phase 86)
- SSOT modules: carrier_init_builder, error_tags (一貫性向上)
- Code quality: Single Responsibility, Testability First principles validated
**Reference**: phase78-85-boxification-feedback.md, carrier_init_builder.rs, error_tags.rs
### Phase 87: LLVM Exe Line SSOT (2025-12-13) ✅
**Status**: COMPLETE - Pipeline 確立完了
**Achievements**:
- SSOT established: `tools/build_llvm.sh` - Single pipeline for .hako → executable
- Integration smoke: phase87_llvm_exe_min.sh (exit code 42 verification)
- Minimal fixture: apps/tests/phase87_llvm_exe_min.hako (5 lines, return 42)
- Full documentation: phase87-selfhost-llvm-exe-line.md (troubleshooting + advanced usage)
**Policy**:
- ✅ Use build_llvm.sh SSOT (no duplication/fragmentation)
- ✅ Integration smoke only (not in quick profile)
- ✅ SKIP if LLVM unavailable (graceful degradation)
- ✅ Exit code verification (stdout-independent testing)
**Impact**:
- Standard procedure: `tools/build_llvm.sh input.hako -o output_exe`
- Prerequisites documented: llvm-config-18, llvmlite, LLVM features
- Integration test: PASS (or SKIP if no LLVM)
**Reference**: phase87-selfhost-llvm-exe-line.md
### Phase 88: Continue + 可変ステップ (2025-12-14) ✅
**Status**: COMPLETE - dev-only fixture 固定完了
**Achievements**:
- continue + 可変ステップi=i+const 差分加算)を dev-only fixture で固定
- continue 分岐側での acc 更新を許可
- Fail-Fast 仕様固定(非 const の i 更新を拒否)
- StepCalculator Box 抽出(+6 unit tests、再利用可能な純関数設計
- エラーメッセージ詳細化Expected/Found/Hint 形式)
**Impact**:
- Tests: 993 lib tests PASS, 60 normalized_dev tests PASS
- 箱化スコア: 9/10Phase 33 Box 理論の模範実装)
- コード削減: 5%321→305行、重複ロジック削除
**Reference**:
- continue_pattern.rs, step_calculator.rs
- jsonparser_unescape_string_step2_min.program.json
### Phase 89 P0: Continue + Early Return Pattern Detector (2025-12-14) ✅
**Status**: COMPLETE - Dev-only detector 確立完了
**Achievements**:
- Pattern4 detector 締めSelect 必須 + conditional Jump exactly 1
- LoopPattern::ContinueReturn enum 追加
- NormalizedDevShape::PatternContinueReturnMinimal 追加detector: Select + conditional Jumps >= 2
- Fail-Fast: UnimplementedPattern errorフォールバックなし
- canonical には入れないdev-only、誤爆防止
**Impact**:
- Pattern4 誤爆防止continue+return を正しく区別)
- Tests: 987 lib tests PASS
**Reference**:
- shape_guard.rs, loop_patterns/mod.rs, analysis.rs
- pattern_continue_return_min.program.json (fixture)
### Phase 89 P1: ContinueReturn Lowering Implementation (2025-12-14) ✅
**Status**: COMPLETE - 独立箱実装完了
**Achievements**:
- continue_return_pattern.rs 実装457行、StepCalculator 再利用)
- Continue + Early Return の JoinIR loweringloop 内 return 対応)
- Fail-Fast 原則徹底5箇所検証
- fixtures.rs に build_pattern_continue_return_min 追加
- normalized_dev tests +2vm_bridge + 期待値 n=10→acc=4
**Impact**:
- Tests: 993 lib tests PASS, 61 normalized_dev tests PASS (+2)
- 箱化原則:単一責任・境界明確・再利用性高
**Reference**:
- continue_return_pattern.rs, fixtures.rs
- tests/normalized_joinir_min/shapes.rs
### Scope / BindingIddev-only の段階移行ライン)
- MIR builder 側で lexical scope / shadowing を実在化し、言語仕様の “local はブロック境界で分離” を SSOT に揃えた。
- JoinIR lowering 側は name-based から BindingId-based へ段階移行中:
- `ScopeManager.lookup_with_binding()` / `ConditionEnv.binding_id_map` を導入し、shadowing を壊さずに解決できる足場を作った。
- promoted carriersDigitPos/Trimについては `BindingId(original) → BindingId(promoted) → ValueId(join)` の鎖を dev-only で整備中。
- Phase 86 で `carrier_init_builder` / `error_tags` を SSOT 化し、段階移行ラインの基盤ValueId 生成とエラー語彙)が確立した。
- これにより、BindingId dual-path の拡張・統合時に「生成」と「表示」の責務が混ざらない構造が固定された。
- Phase 81 で Pattern2DigitPos/Trimの ExitLine 契約ConditionOnly を exit PHI から除外、LoopState のみを reconnectを E2E で固定した。
- 参照:
- `docs/development/current/main/phase73-scope-manager-design.md`
- `docs/development/current/main/phase78-bindingid-promoted-carriers.md`
- `docs/development/current/main/phase80-bindingid-p3p4-plan.md`
- `docs/development/current/main/phase81-pattern2-exitline-contract.md`
- `docs/development/current/main/phase78-85-boxification-feedback.md`
### JsonParser / Selfhost depth2 ライン
- `selfhost_build.sh --json` で Program JSON v0 emit は安定。
`.hako` 側から env 経由で JSON を読む最小ループ(`program_read_min.hako`)は動作確認済み。
- JsonParserBox / BundleResolver のループ 21 本のうち:
- 18 本は Pattern14 で JoinIR 対応済みPhase 162165
- `_trim` を含む一部の複合ループは、ValueId 境界や Box 登録など残課題あり。
- BoolExprLowerer / condition_to_joinir で OR/AND/NOT 付き条件式の lowering は実装完了Phase 168169
- 残課題JsonParser/selfhost depth2
- JoinIR→MIR ValueId boundary の完全一般化(条件用 ValueId を含める)
- JsonParserBox の using / Box 登録Rust VM 側での認識)
- Program JSON v0 を JsonParserBox 経由でフル解析する line の仕上げ
### Ring0 / Runtime / CoreServices ライン
- Ring0Context + Ring0Registry で OS API 抽象化レイヤ完成:
- MemApi / IoApi / TimeApi / LogApi / FsApi / ThreadApi
- RuntimeProfile(Default / NoFs) で条件付き必須を制御。
- CoreServicesring1coreとして次を実装済み
- StringService / IntegerService / BoolService
- ArrayService / MapService / ConsoleService
- PluginHost 統合 + UnifiedBoxRegistry からの自動初期化
- FileBox / FileHandleBox ライン:
- Ring0FsFileIo 経由で read / write / append / metadata 完全対応
- Default プロファイルでは必須、NoFs プロファイルでは disabled。
- Logging ライン:
- ConsoleServiceuserfacing
- Ring0.loginternal/dev
- println!test 専用)
の 3 層が `logging_policy.md` で整理済み。JoinIR/Loop trace も同ドキュメントに集約。
---
## 20250908旧スナップショット参考
- LLVM 側 P0 完了BitOps/Array/Echo/Map 緑。VInvoke(byname/byid vector) は戻り値マッピングの暫定課題を確認中Decisions 参照)。
- selfhosting-dev の作業を main に順次取り込み。VM/MIR 基盤は main で先に整える方針。
直近タスク(当時)
1) continue/break の loweringBuilder 修正のみで表現)
- ループ文脈スタック {head, exit} を導入。
- continue に遭遇 → headまたは latchへ br を emit し終端。
- break に遭遇 → exit へ br を emit し終端。
- postterminated 後に emit しない制御を徹底。
2) ループ CFG の厳密化
- 単一 exit ブロックの徹底。
- Phi はヘッダでキャリー変数を合流SSA/支配関係が崩れない形)。
3) 検証とスモーク
- Verifier 緑dominance/SSA
- VM のループ代表(単純/ネスト/早期継続・脱出)。
- LLVM/Cranelift EXE に綺麗に降りるbr/phi ベースで問題なし)。
代表コマンド(例)
- ビルド: `cargo build --release`
- LLVM smoke: `LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) NYASH_LLVM_BITOPS_SMOKE=1 ./tools/llvm_smoke.sh release`
- VInvoke 調査: `NYASH_LLVM_VINVOKE_TRACE=1 NYASH_LLVM_VINVOKE_SMOKE=1 ./tools/llvm_smoke.sh release`