63 lines
3.5 KiB
Markdown
63 lines
3.5 KiB
Markdown
# Phase 20.32 — Runner 移行(Hakorune 側への薄いゲート)
|
||
|
||
目的
|
||
- Rust Runner への依存を段階的に縮小し、Hakorune 側に「薄い Runner ファサード(Gate‑C 相当)」を実装する。
|
||
- 既存の VM/Core 実装(MIR 実行器)は維持。境界(JSON v0 受理→MIR 構築→実行)の一部を Hako 側に寄せる。
|
||
|
||
非目標(本フェーズではやらない)
|
||
- using 解決(AST/ファイル)全移行、プラグインローダ全置換、大規模 CLI/ENV 互換カバー。
|
||
- 既定経路の全面切替(既定は Rust を維持。Hako Runner は opt‑in)。
|
||
|
||
設計原則(抜粋)
|
||
- Box‑First / Fail‑Fast を継続。副作用境界(ファイル/ENV/プロセス)は箱で隔離、静かなフォールバックは禁止。
|
||
- 既定 OFF のトグルで段階導入。ロールバック容易(小差分・可逆)。
|
||
- 仕様不変:VM の意味論は Rust Builder→NyVM(Core) に依存。Hako Runner は橋渡しのみ。
|
||
|
||
範囲(Phase 20.32)
|
||
- Hako Runner 薄層(lang/src/runner/runner_facade.hako を拡張)
|
||
- 入力: JSON v0(`--json-file`/`--ny-parser-pipe` 相当)。
|
||
- 出力: 数値 Result を exit code へ反映。Quiet/Noise の ENV を最小受理(`NYASH_QUIET` など)。
|
||
- 依存: 既存の Core Dispatcher / Interpreter へ委譲。extern は追加しない。
|
||
- Rust Runner 側トグル
|
||
- `HAKO_SCRIPT_RUNNER=1`(既定OFF)で Hako Runner を呼び出す経路を追加(呼出し/戻りは既存の Gate‑C と同等)。
|
||
- スモーク
|
||
- Gate‑C(file/pipe) の最小 canary(return/binop/if)を Runner(Hako) 経由でも PASS 確認(opt‑in)。
|
||
|
||
実装項目(MVP)
|
||
1) Hako: runner_facade.hako を Gate‑C 最小対応へ拡張
|
||
- 受理: JSON v0 文字列/ファイルパス
|
||
- 実行: 既存 Core VM の JSON→実行(間接呼び)
|
||
- 退出: 数値→exit code、非数値→Fail‑Fast
|
||
2) Rust: トグルで Hako Runner を経由
|
||
- `HAKO_SCRIPT_RUNNER=1` で file/pipe 両方の分岐に Hako 呼出しを追加
|
||
3) ENV 整理
|
||
- 既定 OFF の静音: `NYASH_QUIET=1`/`HAKO_QUIET=1`、`NYASH_CLI_VERBOSE=0`
|
||
- plugins は OFF 既定で通す(本フェーズでプラグイン依存を持ち込まない)
|
||
4) スモーク
|
||
- quick/core に opt‑in 追加: `SMOKES_ENABLE_HAKO_RUNNER=1`
|
||
- 代表 2 本: file/pipe(return 7 / if→1)
|
||
|
||
次フェーズ(予告: 20.33+)
|
||
- CLI/ENV の薄い受理(引数配列・基本オプション)
|
||
- using/前処理の一部箱化(ファイル境界のみ、AST結合は後続)
|
||
- 子プロセス・再帰ガードを Hako へ移設(Rust との並走期間は短期)
|
||
|
||
受け入れ基準
|
||
- 既定経路(Rust Runner)は不変。Hako Runner 経路は opt‑in で quick 緑。
|
||
- Gate‑C 対称(file/pipe)で数値結果→exit code が一致。
|
||
- ノイズ最小(quiet on)かつ Fail‑Fast(非数値や不正入力は安定診断)。
|
||
|
||
トグル一覧(本フェーズ追加)
|
||
- `HAKO_SCRIPT_RUNNER=1`(Rust→Hako Runner 経路に切替)
|
||
- `SMOKES_ENABLE_HAKO_RUNNER=1`(スモーク opt‑in)
|
||
|
||
リスクと対策
|
||
- 実行器の二重解釈: すべて JSON→MIR→既存 VM/Core 実行に統一し、Hako 側で独自実行はしない。
|
||
- ノイズ差: quiet 環境変数を強制し、Result 行のみ/exit code 対称性を確認。
|
||
|
||
参考
|
||
- `lang/src/runner/runner_facade.hako`
|
||
- `src/runner/pipe_io.rs`(Gate‑C 既存挙動)
|
||
- `lang/src/vm/core/json_v0_reader.hako`(JSON v0 解析ユーティリティ)
|
||
|