diff --git a/docs/private/roadmap/phases/phase-20.33/README.md b/docs/private/roadmap/phases/phase-20.33/README.md new file mode 100644 index 00000000..08f68927 --- /dev/null +++ b/docs/private/roadmap/phases/phase-20.33/README.md @@ -0,0 +1,53 @@ +# Phase 20.33 — Hakorune コンパイラ完成(Stage‑B 本線) + +目的 +- Hakorune 製コンパイラを「実用レベル」へ引き上げる(Stage‑B)。 +- Rust ラインの意味論を変えず、Ny→JSON v0(必要に応じて v1→v0)を安定出力。 +- 既存 Runner/VM/LLVM(llvmlite, ny-llvmc)と確実に連携する。 + +非目標(本フェーズ外) +- 大規模最適化(MIR 前処理/LLVM最適化/ベンチ高速化)は Phase‑20.31 継続タスク。 +- Runner の全面移行(Phase‑20.32 にて段階導入)。 + +設計原則 +- Box‑First / Fail‑Fast / 仕様不変(Rust ラインの意味論は維持)。 +- 既定 OFF の新トグル。既定挙動は CI/quick 緑のまま。 +- JSON v0 は 1 行出力(Quiet)。 + +スコープ(Stage‑B) +- ParserBox(Stage‑2/3)→ pipeline_v2 → FlowEntry(emit-only) +- 対応ノード(優先度順) + - 必須: const/binop/compare/if/branch/jump/ret/new/boxcall/externcall + - 実用: load/store/phi/copy/unary/typeop + - 先送り: lambda/async/match(形状のみ or SKIP) +- v1 互換: MirCall(v1)→ MirJsonV1Adapter で v0 に降格(当面の橋渡し) + +受け入れ基準 +- JSON v0 canary(Hako): return/binop/if/index(array/map)緑。 +- Runner(Gate‑C)で v0 を読み VM 実行 → Rust ラインと同じ出力。 +- ny-llvmc(llvmlite)で v0→EXE 生成が最小ケースで PASS。 +- 既定 OFF のため quick/integration は回帰なし。 + +マイルストーン +1) 入口統一 + - Main.main → ParserBox.parse → pipeline_v2 → FlowEntry.emit_v0 で 1 行 JSON 出力。 + - `NYASH_JSON_ONLY=1` 下で静音保証。 +2) 代表構文の対応 + - binop/compare/if/index/new/boxcall/externcall を優先実装。 + - 既存 Stage‑A の canary(binop/if/index)を Stage‑B でも緑化。 +3) v1→v0 アダプタ + - pipeline_v2 が v1(MirCall)を出す経路を活かし、Adapter で v0 へ降格。 +4) スモーク整備 + - tools/smokes/v2/profiles/quick/core/selfhost_* を追加(opt‑in)。 +5) ドキュメント + - 本 README / PLAN / CHECKLIST を維持更新。 + +リスクと対策 +- 仕様すり替え禁止: Runner/VM/LLVM の意味論差が出たら Fail‑Fast。 +- ノイズ: `NYASH_QUIET=1 HAKO_QUIET=1 NYASH_CLI_VERBOSE=0` をデフォルトで inject(emit 経路)。 + +参考 +- lang/src/compiler/pipeline_v2/* +- lang/src/compiler/entry/compiler.hako(入口) +- lang/src/shared/json/mir_v1_adapter.hako +- src/runner/json_v0_bridge/*(Rust 側 v0 ブリッジ)