Files
hakorune/docs/development/current/main/10-Now.md
nyash-codex 8a8c90fc74 docs(joinir): Phase 86 SSOT 追記完了 + Phase 88 準備
Phase 86 SSOT 追記(P0 完了):
- 10-Now.md: carrier_init_builder / error_tags 確立を追記
- CURRENT_TASK.md: P0→P1 繰り上げ、Done 節追加

Phase 88 準備:
- nyash_kernel/lib.rs: AOT 実行器で Ring0Context 初期化
- nyash.toml: プラグインパス正規化(plugins/...)
- auto_detect.conf: integration タイムアウト 120秒に延長

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

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

7.1 KiB
Raw Blame History

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)

Next: Phase 88+ (TBD - await user direction)

Reference: phase87-selfhost-llvm-exe-line.md

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