Phase 20.10 — Script‑First Runner (C‑ABI Unified)
Status
- In progress(部分的に完了)。Runner facade は既定ON(opt‑outで静穏運用可)。
Intent
- Move policy/coordination logic closer to Hakorune (script) while keeping data‑plane at the C‑ABI boundary.
- Unify extern calls via C‑ABI (
hako_*) and minimize Rust‑only decision points. - Preserve VM/LLVM parity and provide small, reversible steps (Fail‑Fast / Box‑First).
Scope (this phase)
- Python/llvmlite 降ろしは据え置き(変更対象外)。
- 対象: 実行エンジンとランナー(調停/方針部分)・Extern/効果解決・CLI/ENV/設定の「上物」を Hakorune スクリプト側に寄せる。
- ルール: Extern は C‑ABI (
hako_*) 経由に統一し、dotted C シンボルは AOT に流さない。
High‑Level Goals
- Script Runner(Ref‑VM/Runner facade)を lang 側に置き、エントリ/コーディネーションを段階移譲。
- Extern/Effects の解決方針を SSOT で管理(将来 TOML → Rust/Python 生成)。
- CLI/ENV は CLI を正、ENV は補助(HAKO_* を第一表記)に統一。
Outcomes so far(20.10 前半の成果)
- Runner pre‑invoke(既定ON)
- 成功/失敗の短文を固定(stdout):
[script-runner] invoke/invoke: FAIL。 - 代表スモーク(quick/integration-core)を追加(invoke / workspace-only)。
- UsingResolver の前段/比較/シャドウの観測フックを追加(挙動不変)。
- 成功/失敗の短文を固定(stdout):
- Externs SSOT
specs/externs.tomlを SSOT とし、生成スクリプトで Python/Rust を同期。- チェックを STRICT へ昇格(drift は FAIL)。
- Effects の取り込み導線(env):
HAKO_EXTERN_EFFECTS_SSOT=1(Io を反映)。
- AOT selfhost ランチャ(最小)
lang/build/build_runner.shでlang/bin/hakoruneを生成(LLVM18 dev が必要)。- 代表スモーク(quick)でビルド→実行を確認(exit code=0)。
Out‑of‑Scope
- Python/llvmlite の大きな構造変更(降ろしは現状維持)。
- GC/IO/例外/非同期の実装拡張(本フェーズでは扱わない)。
Risk & Rollback
- すべて gate 配下(既定 OFF)。スモークは parity/diagnostics のみを増強。
- 戻し手順: gate を OFF、または Runner 経路を既存 Rust ラインへ戻すだけで可逆。
TTL(bring‑up 限定トグル)
HAKO_SCRIPT_RUNNER_FORCE_FAIL,HAKO_SCRIPT_RUNNER_TRACEは撤退済み。固定短文のみ維持(invoke/FAIL)。