docs(phase-20.33): Stage‑B Hakorune compiler plan (scope/milestones/criteria)

This commit is contained in:
nyash-codex
2025-11-01 01:49:42 +09:00
parent 8b71f25dd4
commit 5597b78f0d

View File

@ -0,0 +1,53 @@
# Phase 20.33 — Hakorune コンパイラ完成StageB 本線)
目的
- Hakorune 製コンパイラを「実用レベル」へ引き上げるStageB
- Rust ラインの意味論を変えず、Ny→JSON v0必要に応じて v1→v0を安定出力。
- 既存 Runner/VM/LLVMllvmlite, ny-llvmcと確実に連携する。
非目標(本フェーズ外)
- 大規模最適化MIR 前処理/LLVM最適化/ベンチ高速化)は Phase20.31 継続タスク。
- Runner の全面移行Phase20.32 にて段階導入)。
設計原則
- BoxFirst / FailFast / 仕様不変Rust ラインの意味論は維持)。
- 既定 OFF の新トグル。既定挙動は CI/quick 緑のまま。
- JSON v0 は 1 行出力Quiet
スコープStageB
- ParserBoxStage2/3→ pipeline_v2 → FlowEntryemit-only
- 対応ノード(優先度順)
- 必須: const/binop/compare/if/branch/jump/ret/new/boxcall/externcall
- 実用: load/store/phi/copy/unary/typeop
- 先送り: lambda/async/match形状のみ or SKIP
- v1 互換: MirCallv1→ MirJsonV1Adapter で v0 に降格(当面の橋渡し)
受け入れ基準
- JSON v0 canaryHako: return/binop/if/indexarray/map緑。
- RunnerGateCで v0 を読み VM 実行 → Rust ラインと同じ出力。
- ny-llvmcllvmliteで 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 を優先実装。
- 既存 StageA の canarybinop/if/indexを StageB でも緑化。
3) v1→v0 アダプタ
- pipeline_v2 が v1MirCallを出す経路を活かし、Adapter で v0 へ降格。
4) スモーク整備
- tools/smokes/v2/profiles/quick/core/selfhost_* を追加optin
5) ドキュメント
- 本 README / PLAN / CHECKLIST を維持更新。
リスクと対策
- 仕様すり替え禁止: Runner/VM/LLVM の意味論差が出たら FailFast。
- ノイズ: `NYASH_QUIET=1 HAKO_QUIET=1 NYASH_CLI_VERBOSE=0` をデフォルトで injectemit 経路)。
参考
- 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 ブリッジ)