- DoD met: S1/S2 determinism (const/compare/threeblock-collect), PRIMARY hv1 inline no-fallback, S3 (llvmlite+kernel) reps green - Harness: v1→llvmlite direct, EXE links to libnyash_kernel.a - Python LLVM builder fixes: cmp normalization, ret PHI synthesis, mir_call flat shape - Using/alias polish (prod): modules-first; missing aliases added; duplicate using cleaned - Docs: phase-21.0 COMPLETE; CurrentTask closed; release notes added
25 KiB
Current Task — Phase 21.0(Full Self‑Hosting) — ✅ COMPLETE
目的(このフェーズで到達するゴール)
- Self‑Hosting の決定性(S1/S2/S3 を3回連続で一致)
- 代表の横展開(If/Logical/Loop/Array/Map/TypeOp/Extern)を no‑fallback で拡張
- S3 代表(llvmlite + NyRT リンク)の最小一式を quick で常時緑(環境が無い場合はSKIPで保護)
This document is intentionally concise (≤ 500 lines). Detailed history and per‑phase plans are kept under docs/private/roadmap/. See links below.
Focus (now) - 🎯 完全自己ホストの最終整備(完了)
- S1/S2(v1 生成の決定性): const/compare/threeblock-collect の繰り返し一致 → 緑
- S3(llvmlite+Nyash Kernel、自動): ternary/map のリンク→実行(rc期待)→ 緑
- PRIMARY(no‑fallback): hv1 inline 直行で v1 reps(Option‑A/B 最小)→ 緑
Remaining (21.0)
- なし(DoD達成)。ドキュメント更新済み(Quick Verify/DoD/環境要件)。
Previous Achievement
- ✅ Phase 20.44 COMPLETE(provider emit/codegen reps 緑)
- ✅ Phase 20.45‑46: PRIMARY 切替のための品質・整流(env_bool・MethodAliasPolicy・MirBuilder prefer reps の整備)
- ✅ Phase 20.48 COMPLETE(Deterministic Bootstrap & Parity: run_all 緑 / repeat 3回一致)
- ✅ Phase 20.49 COMPLETE(SSOT & hv1 inline 最小:phase2049/run_all 緑、S3 reps ゲート整備)
Next Steps (ordered)
- repeat reps: TypeOp を追加(済)
- PRIMARY reps: Array/Map 三受信者の独立性(追加済)
- S3 reps を1本追加(3ブロック系、LLVM18 検出で自動実行)
- README(20.48)へ Quick Verify の項目拡張(typeop_check/cast と multi‑recv を追記済)
Close Ready(20.48)
- 条件:
- s1s2s3_repeat_*(const/compare/logical/typeop)が3回一致
- PRIMARY reps(If/Logical/Loop/Array/Map/TypeOp)が PASS(no‑fallback)
- run_all(phase2048)が緑(S3 は LLVM18 環境で自動、NYASH_LLVM_S3=0 で明示無効)
Hotfix Plan — Using/Prelude Unification (Self‑Host)
- Problem: .hako を NyashParser に通す経路でパース落ち(Invalid expression)。
- Decision: プレリュードは“テキスト統合(merge_prelude_text)”に一本化。AST マージは撤退。
- Resolver 入口は共通(alias/modules/packages/builtin)。
- 以降はメインの言語に応じて実行器へ渡す(Hako→Hakorune VM / MIR→Core)。
- NyashParser は Nyash コードのみ。Hako は Nyash VM 経路に入れない(Fail‑Fast)。
Action Items (20.38)
- P1 C‑ABI ブリッジ(既定OFF)
- Hako provider→Rust extern_provider へ最小接続(emit/codegen)。
- ハーネスのタグ用シム(test_runner)を撤去できる状態にする。
- P2 v1 Dispatcher IR 完了+φテーブル堅牢化
- V1SchemaBox.get_function_ir を構造IRで返却(blocks/phi_table)。
- ループは IR 反復に完全切替、φ は entry 適用(命令ループから除去)。
- 複数φ/複数incoming/空白改行混在を canary で固定。
- P3 Verify 既定整流(完了)
- v1→Hakorune を既定ON、Core は診断 fallback。末尾数値抽出で rc を一意化。
- include ポリシー quick=ERROR を維持(ドキュメントと一致)。
- P4 Resolver/alias 仕上げ
- lang/src/vm/** の alias を監査し、直参照を払拭。normalize/trace ログは最小に整流。
- P5 Docs 反映
- phase‑20.38 のトグル/受け入れ条件/撤去予定のシムを反映。φ entry SSOT は IR 完了後に更新。
- extern タグ用シムの現状と撤去条件(hv1 inline 安定後に除去)を明記。
Acceptance(phase 21.0)
- S1/S2: selfhost/* → v1 生成の 3回一致(代表2本:const/flow)
- S3: v1 → obj → NyRT リンク → 実行(rc期待)を reps で緑(LLVM18 環境で自動)
- PRIMARY: 検証は Hakorune(no‑fallback)で統一、代表が緑
Next Task — Phase 20.49(Resolver SSOT & Compiler Bring‑up)
目的(このフェーズで到達するゴール)
- using/プレリュード統合の SSOT を dev/prod で確定(include は prod で非対応)
- dev では toml なしの最短導線(相対パス using / preinclude)で“すぐ動く”を保証
- コンパイラ自走に必要な hv1 inline の最小カバレッジを reps で固定
Focus(20.49)
- Resolver/Runner: using 解決と prelude 統合の一本化(dev/prod トグルを明文化)
- Reps: using/alias/nested prelude の代表追加(dev/prod 両系)
- hv1 inline: 命令/extern の最小セットを reps から埋める(不足は段階実装)
- S3(任意): ternary / map set→size 等のE2E代表を
NYASH_LLVM_S3=1で実行
Acceptance(20.49)
- dev: toml無し一発経路でコンパイラ一式の v1 生成が成功(S1/S2 繰り返し一致)
- prod: alias/modules 経路のみで run_all が緑(include=ERROR)
- hv1 inline: 代表で本体必要最小命令/extern が緑
Changes (recent)
- Core executor: v1 優先実行(schema_version 検出時)。
- hv1 mir_call handler: per‑recv size state 実装+trace。
- test_runner: HAKO_VERIFY_V1_FORCE_HAKOVM=1 を追加(hv1 ラッパーで v1 実行)。
- hv1 inline reps: 代表を整備(per‑recv second は暫定 rc=1)。
Changes (this pass)
- 20.44 を ✅ COMPLETE にマーク
- 20.47/20.48 のフェーズ文書を追加(自己ホストの工程と受け入れを明文化)
- 拡張子統一(.hako/.nyash 等価): 仕様の明文化 + 実装反映
- Fail‑Fast(Hako in Nyash VM)既定OFF(HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=1 のみON)
- using はテキスト・プレリュード統合を既定に(AST統合は任意)
- using 解決は .hako 優先→.nyash 次点。using.paths に lang/src を追加
- ドキュメント更新: docs/guides/source-extensions.md を等価性ポリシーに刷新
- runner: env_bool 横展開(common_util/strip.rs, modes/pyvm.rs, modes/common.rs, hv1_inline.rs)
- vm: MirCallV1HandlerBox trace の受信者IDログ修正
- quick/core phase2036: v1_minivm_size_stub_off_canary_vm を修正
- using をパス指定から alias(
using selfhost.vm.entry as MiniVmEntryBox)へ切替 NYASH_PREINCLUDE=1を注入してプレリュードをテキスト統合(prod プロファイルの path using 限制を回避)- 結果: rc=0 で PASS(スタブ時の size=0 が Mini‑VM の rc に反映)
- using をパス指定から alias(
- quick/core phase2047: Using alias 代表を追加
- tools/smokes/v2/profiles/quick/core/phase2047/using_alias_selfhost_vm_entry_canary_vm.sh(PASS)
- alias 解決の実行確認(cross‑box static call → rc=0)
- tools/smokes/v2/profiles/quick/core/phase2047/using_alias_string_helpers_canary_vm.sh(PASS)
- shared/helpers の alias 解決を実行確認(静的呼び出し)
- Self‑Hosting S1/S2(builder 直行)
- gen: tools/selfhost/gen_v1_from_builder.sh(emit_return_int2(42) → v1 JSON 出力)
- canary: tools/smokes/v2/profiles/quick/core/phase2047/selfhost_s1_s2_from_builder_canary_vm.sh(PASS)
- provider 雛形: tools/selfhost/gen_v1_from_provider.sh(C‑ABI 連携は段階導入)
- Provider v1 強制(最終化)
- src/host_providers/mir_builder.rs: emit前後で v1 を強制(NYASH_JSON_SCHEMA_V1=1 一時設定 + 読み戻し時の v1 ラップ)
- hv1 inline 実装の強化
- Array と Map の per‑receiver サイズ状態を分離(独立マップ: arr/map)
- MapBox: set→size を rc で検証可能(first=1/second=0 reps と整合)
- Docs 更新
- phase‑20.48 の README に “Quick Verify” セクションを追加(run_all と S3 トグルの手順)
- canary 追加: tools/smokes/v2/profiles/quick/core/phase2047/provider_v1_shape_canary_vm.sh(PASS)
- SSOT の徹底(strip.rs 連携)
- src/runner/modes/common_util/resolve/strip.rs: is_path 判定と dev-file 候補判定を SSOT に寄せ(path_util)
- S1/S2 拡張 reps(builder)
- gen: tools/selfhost/gen_v1_from_builder_compare_{cfg,ret}.sh
- canary: tools/smokes/v2/profiles/quick/core/phase2047/selfhost_s1_s2_from_builder_compare_{cfg,ret}_canary_vm.sh(PASS/環境で整合)
- S3 reps(llvmlite, NyRTリンク, 実行)
- phase2047/s3_link_run_llvmlite_compare_{cfg,ret}_canary_vm.sh(rc=1)
- phase2047/s3_link_run_llvmlite_const42_canary_vm.sh(rc=42)
- phase2047/s3_link_run_llvmlite_branch_ret_44_canary_vm.sh(rc=44)
- 生成器: tools/selfhost/gen_v1_from_builder_branch_ret_44.sh
- PRIMARY no‑fallback reps(hv1 inline)
- phase2047/primary_no_fallback_v1_const_rc_canary_vm.sh(rc=42)
- phase2047/primary_no_fallback_v1_compare_branch_rc_canary_vm.sh(rc=1)
- phase2047/primary_no_fallback_v1_jump_rc_canary_vm.sh(rc=7)
- S1/S2 拡張 reps(builder)
- gen: tools/selfhost/gen_v1_from_builder_compare_{cfg,ret}.sh
- canary: tools/smokes/v2/profiles/quick/core/phase2047/selfhost_s1_s2_from_builder_compare_{cfg,ret}_canary_vm.sh(PASS/環境で整合)
- S3 代表(llvmlite, NyRTリンク, 実行)
- phase2047/s3_link_run_llvmlite_compare_cfg_canary_vm.sh(NYASH_LLVM_S3=1 で有効、SKIPガードあり)
- Self‑Hosting S1/S2 実行例(雛形)を追加
- tools/selfhost/examples/gen_v1_const42.sh(最小 v1 を出力)
tools/selfhost/bootstrap_s1_s2.sh --cmd1 'bash tools/selfhost/examples/gen_v1_const42.sh' --cmd2 'bash tools/selfhost/examples/gen_v1_const42.sh'→ PASS(正規化ハッシュ一致)
// Loop compares normalization (Step‑1)
- Loop lowers(simple/count_param/sum_bc): Compare 受理を拡張し Lt 形へ正規化。
- i < L / i <= L は既存通り(<= は L+1)。
- L > i / L >= i は左右スワップで受理(>= は L+1)。
- i != L は init=0, step=1 の単純カウントに限り i < L と同値として受理。
- Canaries: phase2039 に追加(swapped > / >=, !=)し、Core verify で PASS を確認。
// Step‑2/3 generalization (count_param)
- step 一般化: Int 2,3,… と Local Var 由来の step を受理。'-' は負の step に正規化(Add + 負値)。
- 降順対応: i > / i >= limit を cmp=Gt/Ge で build2 へ伝達。
- init/limit 起源の拡大: Local Var(Int)由来を逆引きで受理。
- Canaries: step=2 / step(Local) / 降順('-')/ limit(Local) / init(Local) を追加し PASS。
// Step‑4(部分) break/continue 検出の堅牢化(sum_bc)
- 'i==X' に加え 'X==i' も受理。専用カナリー(swapped equals) PASS。
- If(var != X) else [Break] の最小サブセットを受理(loop_scan_box へ委譲)。専用カナリー PASS。
- If(var != Y) else [Continue] は検出実装あり(inline)が未検証→次段で helper へ移設しつつ canary 追加予定。
What’s green (20.34)
- Loop/PHI unify (phi_core) in JSON v0 bridge — unified path used (toggle exposed).
- Program(JSON v0) PHI‑trace canaries — PASS.
- Core exec canaries (builder → emit → Core) — now routed and PASS:
- mirbuilder_internal_core_exec_canary_vm (rc=10)
- mirbuilder_internal_loop_core_exec_canary_vm (rc=3)
- mirbuilder_internal_loop_count_param_core_exec_canary_vm (rc=6)
- mirbuilder_internal_loop_sum_bc_core_exec_canary_vm (rc=8)
Recent changes (summary)
-
Added MIR JSON v0 loader (minimal): src/runner/mir_json_v0.rs
- Supports const/compare/branch/jump/phi/ret/copy
-
Promoted --mir-json-file to “execute + exit(rc)”
- v1 → try_parse_v1_to_module; v0 → minimal loader; executes via Core interpreter
- rc mapping unified in execute_mir_module_quiet_exit
-
verify_mir_rc improvements (tools/smokes/v2/lib/test_runner.sh)
- Core primary: MIR(JSON) uses --mir-json-file, Program(JSON v0) uses --json-file
- Mini‑VM(hakovm)rc==1 ヒューリスティックを削除し、経路評価を素直化(v1はCore、v0はhakovmに整流)
-
Hako JSON reader minor fix
- lang/src/vm/core/json_v0_reader.hako: r# raw を通常文字列に統一(Hako生文字列の互換性向上)
-
MIR JSON v1 bridge extended
- parse_const_value now handles f64/float, bool, string, and handle(StringBox) → ConstValue::String
- Direct extern names supported in VM interpreter: env.mirbuilder.emit, env.codegen.emit_object
-
New v1 canaries (Core route)
- tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_indexof_canary_vm.sh
- tools/smokes/v2/profiles/quick/core/phase2035/v1_extern_mirbuilder_emit_canary_vm.sh
- tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_substring_1arg_canary_vm.sh
- tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_substring_2args_canary_vm.sh
- tools/smokes/v2/profiles/quick/core/phase2035/v1_array_push_size_canary_vm.sh
- (map) tools/smokes/v2/profiles/quick/core/phase2035/v1_map_set_get_size_canary_vm.sh
- Note: returns size (1) for rc stability; get-path validated structurally
-
20.38 extern bring-up (Hakorune primary)
- Hakorune provider tags: prints
[extern/c-abi:mirbuilder.emit]/[extern/c-abi:codegen.emit_object]whenHAKO_V1_EXTERN_PROVIDER_C_ABI=1(既定OFF) - Core extern provider: when
HAKO_V1_EXTERN_PROVIDER=1,env.mirbuilder.emit/env.codegen.emit_objectreturn empty string (stub) to keep rc=0(verify fallbackの安定化) - Dispatcher(FLOW): minor cleanup to avoid stray scanning code; ret-path returns value and does not emit trailing prints
- Canaries: phase2038 emit/codegen → PASS(タグ+rc=0 を固定)。phi 追加ケース(then→jump combo3)も PASS。
- Hakorune provider tags: prints
Open (pending)
- SSOT helpers(binop_lower / loop_common)の導入と呼び出し置換(Builder/Bridge)。
- Continue ‘!=’ else の builder 経路の MIR 生成整流(rc=8 固定化)。
- P1〜P4 の実装・緑化(上記 Action Items)。
Active toggles (debug/verify)
- HAKO_VERIFY_PRIMARY=hakovm|core(既定 hakovm、Coreは診断)
- HAKO_V1_DISPATCHER_FLOW=1(v1 FLOW 実行)
- HAKO_V1_EXTERN_PROVIDER=1(Hako extern provider 有効)
- HAKO_V1_EXTERN_PROVIDER_C_ABI=1(タグ/ブリッジ実験。既定OFF)
- HAKO_V1_PHI_STRICT=1 / HAKO_V1_PHI_TOLERATE_VOID=1(φポリシー)
- NYASH_RESOLVE_TRACE=1 / NYASH_RESOLVE_NORMALIZE=1(resolver dev)
How to run (quick)
- Build:
cargo build --release - Program v0 PHI‑trace (debug):
SMOKES_ENABLE_DEBUG=1 bash tools/smokes/v2/profiles/quick/core/phase2034/program_v0_if_phi_trace_vm.shSMOKES_ENABLE_DEBUG=1 bash tools/smokes/v2/profiles/quick/core/phase2034/program_v0_loop_phi_trace_vm.sh
- Core exec canaries(20.34 緑対象):
bash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_core_exec_canary_vm.shbash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_core_exec_canary_vm.shbash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_count_param_core_exec_canary_vm.shbash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_sum_bc_core_exec_canary_vm.sh
Mini‑VM policy(20.34)
- 実装は維持(alias/ret/phi 最小系を今後整える)。ただし quick の canary は Core へ寄せて緑化。
- 20.36 で verify primary を hakovm に段階的に切替、Mini‑VM green を進める。
Next (20.35 — scoped; behavior unchanged)
- MIR JSON v1 loader expansion(Method/Extern/BoxCall — 最小)
- callee.type=Method → BoxCall 復元(box_name/method/receiver/args)
- callee.type=Extern → ExternCall 復元(env.get/env.codegen.emit_object/env.mirbuilder.emit/console.log など)
- effects 未指定は PURE 既定、WRITE 系は最小でフラグ化(実害ゼロ)
- v1 canary 追加(string indexOf/substring、array push/size、map set/get/size、extern env.get)
- Using/alias の推移解決の堅牢化(深さ/循環/キャッシュ)
- 実装済み(DFS 深さ上限=10、循環検知、キャッシュ)。strict では曖昧解決をエラー扱い。
- ドキュメント:今回の経路(Core/verify)を roadmap に反映(DONE)
Structure cleanups (20.35 A→B→C)
- A) v1 mir_call 両対応(flat/nested): 実装済(ローダで互換吸収)。
- B) Extern provider 単一点化: 実装済(handlers/extern_provider.rs)。calls.rs/externals.rs から委譲。
- C) Const パース共通化: 実装済(src/runner/mir_json/common.rs)。まず v1 から採用(v0 は次段)。
Next (20.36 — verify primary → hakovm, preinclude removal, C‑ABI scaffold)
- Verify primary 切替(段階): hakovm → Core fallback
- preinclude 非推奨化(quick から撤去)
- Mini‑VM の最小状態(len/size/push の簡易 state)を flag ガードで導入(デフォルトOFF)— 導入済
- 受信者別サイズ管理フラグ
HAKO_VM_MIRCALL_SIZESTATE_PER_RECV=1を導入(canary 追加済) - HAKO_VM_MIRCALL_SIZESTATE=1 は緑化済(push 2回→size=2)。次は受信者別管理を flag で導入: HAKO_VM_MIRCALL_SIZESTATE_PER_RECV=1
- C‑ABI 設計(docs + ヘッダ雛形)
Known open items(tracked to 20.36)
- Mini‑VM: using/alias の推移解決(selfhost.vm.helpers.* 連鎖)
- Mini‑VM: ret/phi の最小ケースで rc が確実に数値化されるよう整備(継続確認)
Next (20.37 — v1 Dispatcher & Phi)
- V1SchemaBox: get_function_ir(JSON→IR) を拡張(blocks/insts/phi_table を一括)
- NyVmDispatcherV1Box: IR反復へ切替(スキャナ依存の最終撤去)、今は二重化(IR優先/scan後退互換)
- Resolver/inline: AST prelude マージで推移usingを一次収束(Claude codeで進行)、ランナーは既存fallback維持
Next (Hotfix — Using/Prelude Unification)
- vm.rs: using_ast 経路を
merge_prelude_textに一本化(ASTマージ撤去) - vm.rs: Hako 構文検出で Hakorune VM へ切替(NyashParser をバイパス)
- strip.rs:
.hakoの AST パース抑止と診断ガイド - verify: extern canary を PASS 化(末尾 rc 抽出の安定化) Docs:
- docs/development/architecture/phi-entry-in-hako.md に φ entry 設計のSSOTを記載(不変条件/flags/テスト)
Next (20.38 — extern provider & C‑ABI)
- HakoruneExternProviderBox を拡張(warn/error/emit の最小タグ/空文字挙動)— 完了
- HAKO_V1_EXTERN_PROVIDER=1 の canary 追加(構造緑固定)— 完了
- C‑ABI 導線のPoC接続(emit/codegen、既定OFF)— 完了(タグ+rc=0)
- hv1 inline 安定化(残): -c 経路の using resolver に modules.workspace を強制ロードするか、dispatcher の using を dev 限定で path 化。
- include 撤去の計画(dev → 本線):
- まず stub カナリーの include は撤去済み(rc=0 のみ確認)。
- hv1 inline カナリーの prelude include は暫定(dev専用)。-c/alias 安定後に alias へ移行して include を撤去する。
- ランナー側では merge_prelude_text を既定経路とし、include は quick=ERROR のポリシーを維持。
Roadmap links(per‑phase docs)
- Index: docs/private/roadmap/README.md
- Phase 20.34: docs/private/roadmap/phases/phase-20.34/README.md
- Phase 20.35: docs/private/roadmap/phases/phase-20.35/README.md
- Phase 20.36: docs/private/roadmap/phases/phase-20.36/README.md
Appendix — Toggle quick reference
- NYASH_MIR_UNIFY_LOOPFORM=1|0 … Loop/PHI 統一(既定ON)
- HAKO_VERIFY_PRIMARY=hakovm|core … verify 実行経路(今は core 優先で緑化)
- NYASH_VM_TRACE_PHI=1 … VM PHI 適用トレース
- HAKO_PHI_VERIFY=1 | NYASH_PHI_VERIFY=1 … ビルダー側の PHI inputs 検証
- HAKO_VM_PHI_STRICT=0(互換:NYASH_VM_PHI_STRICT=0) … 実行時 PHI 厳格 OFF(開発時のみ)
Updates (2025-11-04)
- hv1 inline: alias-only route stabilized (no include/preinclude). vm.rs wrapper now uses
using selfhost.vm.hv1.dispatchand relaxes fail-fast for child. - Verify harness: include+preinclude fallback for v1 removed in
verify_mir_rc; alias-only hv1 is the standard path. - Concat-safety (hv1 scope): replaced
"" + <int>coercions withStringHelpers.int_to_str(...)inlang/src/vm/hakorune-vm/dispatcher_v1.hakoandlang/src/vm/boxes/mir_call_v1_handler.hako.
Handoff — 20.43 Kickoff (15h progress)
Focus (next)
- Start Phase 20.43: MIR generation coverage for call/method/newbox/load/store/typeop, with minimal Array/Map bridge (structure-first, no behavior change).
What’s landed this session (DONE)
- NewBox → Constructor (minimal lower)
- Added:
lang/src/mir/builder/internal/lower_newbox_constructor_box.hako - Wired in:
lang/src/mir/builder/MirBuilderBox.hako(try_lower early) and alias innyash.toml. - Direct canary (PASS):
tools/smokes/v2/profiles/quick/core/phase2043/lower_newbox_constructor_direct_core_exec_canary_vm.sh.
- Added:
- Method(size) → structural MIR (Array)
- Added:
lang/src/mir/builder/internal/lower_method_array_size_box.hako+ alias innyash.toml. - Direct structural canary (PASS):
tools/smokes/v2/profiles/quick/core/phase2043/lower_method_array_size_direct_struct_canary_vm.sh.
- Added:
- Method(push) → structural MIR (Array)
- Added:
lang/src/mir/builder/internal/lower_method_array_push_box.hako+ alias innyash.toml. - Direct structural canary (PASS):
tools/smokes/v2/profiles/quick/core/phase2043/lower_method_array_push_direct_struct_canary_vm.sh.
- Added:
- New → Constructor (direct) and Method(size/push) canaries all green under phase‑2043.
- Array get/set
- Added:
lang/src/mir/builder/internal/lower_method_array_get_set_box.hako+ alias. - Direct structural canary (PASS):
tools/smokes/v2/profiles/quick/core/phase2043/lower_method_array_get_set_direct_struct_canary_vm.sh.
- Added:
- Map size/get/set
- Added:
lang/src/mir/builder/internal/lower_method_map_size_box.hako,lower_method_map_get_set_box.hako+ aliases. - Direct structural canaries (PASS):
lower_method_map_size_direct_struct_canary_vm.sh,lower_method_map_get_set_direct_struct_canary_vm.sh.
- Added:
- Load/Store(最小)
- Added:
lang/src/mir/builder/internal/lower_load_store_local_box.hako+ alias。 - Direct structural canary (PASS):
lower_load_store_local_direct_struct_canary_vm.sh。
- Added:
- TypeOp Check(最小)
- Added:
lang/src/mir/builder/internal/lower_typeop_check_box.hako+ alias。 - Direct structural canary (PASS):
lower_typeop_check_direct_struct_canary_vm.sh。
- Added:
- TypeOp Cast(最小)
- Added:
lang/src/mir/builder/internal/lower_typeop_cast_box.hako+ alias。 - Direct structural canary (PASS):
lower_typeop_cast_direct_struct_canary_vm.sh。
- Added:
- Builder internal route stabilized for simple New → Core via runner_min
- Added:
lang/src/mir/builder/internal/runner_min_box.hako+ alias。 verify_program_via_builder_to_coreuses runner_min first, with markers + optional full MirBuilder fallback.
- Added:
- Harness improvements
- Builder output extraction with markers
[MIR_OUT_BEGIN]/[MIR_OUT_END]intools/smokes/v2/lib/test_runner.sh. - Debug tails for stdout/stderr when
HAKO_MIR_BUILDER_DEBUG=1. - Enabled using for inline runs:
NYASH_ENABLE_USING=1/HAKO_ENABLE_USING=1.
- Builder output extraction with markers
Open items / blockers
- Builder (internal/delegate) inline route still unstable for JSON capture;
phase2043/program_new_array_delegate_struct_canary_vm.shfails (no JSON in stdout).- Plan: switch builder to write MIR to a temp file (FileBox) and let harness read it; or adopt provider route in 20.44 (
env.mirbuilder.emit).
- Plan: switch builder to write MIR to a temp file (FileBox) and let harness read it; or adopt provider route in 20.44 (
- Remaining lowers for 20.43 not yet added: method(push/get/set/len), load/store (local), typeop(is/as) minimal; builder wiring after direct lowers pass.
Next-up checklist (20.43)
- MirBuilder wiring: 上記 direct lowers を
MirBuilderBoxから段階採用(Return系フォールバック前)→ 一部(Array/Map/LoadStore/TypeOp)採用済み。 - New(Map) は Constructor lower で既に生成可能(direct PASS)。Builder経路へ採用。
- TypeOp:
Cast採用済(構造lower→canary→配線)。 - Builder route 安定化(internal):lower ラッパー側で MIR を
/tmpに保存→ハーネスが読む(pipe 揺れを回避)。 - Delegate route(20.44 に接続):
env.mirbuilder.emitを provider 経由に切替(構造は共通)。 - Delegate route (optional): use provider
env.mirbuilder.emit(20.44 scope) to make canaries robust.
How to run
- All new phase 20.43 canaries:
bash tools/smokes/v2/run.sh --profile quick --filter phase2043
- Single tests:
- NewBox direct:
tools/smokes/v2/profiles/quick/core/phase2043/lower_newbox_constructor_direct_core_exec_canary_vm.sh - Method(size) direct:
tools/smokes/v2/profiles/quick/core/phase2043/lower_method_array_size_direct_struct_canary_vm.sh
- NewBox direct:
Toggles (dev)
- Inline Hako:
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 - Builder internal:
HAKO_MIR_BUILDER_INTERNAL=1(andHAKO_MIR_BUILDER_DEBUG=1for tails)
Pointers
- New lowers:
lang/src/mir/builder/internal/lower_newbox_constructor_box.hako,lang/src/mir/builder/internal/lower_method_array_size_box.hako - Wiring:
lang/src/mir/builder/MirBuilderBox.hako(try_lower order) andnyash.tomlaliases - Harness:
tools/smokes/v2/lib/test_runner.sh(marker extraction / debug tails)