Phase 20.11 — AOT FFI + AotBox Plugin + Runner Decision(脱Rust/配布前進)
目的
- AOT の実用導線を「小ライブラリ + プラグイン(AotBox)」で公開し、将来は「プロセス → インプロセス(FFI)」へ段階移行。
- UsingResolver の“本配線”へ一歩前進(挙動不変のまま runner→ModuleFunction 決定導線を細く接続)。
- EXE 配布 UX を整える(ユーザーが自作ハコルネスクリプトを簡単に exe 化できる導線)。
範囲(変更は小差分・既定不変)
- AOT: 入口は AotBox プラグイン(compile/2, link/3)を優先。内部で C‑ABI 小ライブラリ → FFI(native/harness/rust) を委譲。
- 直結の小ライブラリ経路は後方互換として温存(プラグイン未ロード時のフォールバック)。
- Runner: UsingResolver.resolve/1 の結果(JSON)を受け取り、Rust 側は検証/整流へ寄せるためのフックをゲート配下に追加。
- 配布: bin ランチャと dist レイアウトの雛形を整備。OS 別アーティファクトの配置規約を固定。
ゲート
HAKO_AOT_USE_FFI=1(既定OFF): ny-llvmc を in‑process で呼ぶ FFI 経路に切替(現時点スタブ)。HAKO_AOT_USE_PLUGIN=1(既定OFF): emit-exe 経路を AotBox 経由に切替(段階導入・挙動不変)。HAKO_CODEGEN={llvm|cranelift}(既定=llvm): 将来の Cranelift 実験を opt‑in で許可。HAKO_USING_DECISION_FROM_LANG=1(既定OFF): runner→ModuleFunction の決定を使用(失敗は Fail‑Fast・短文)。
受け入れ基準(概要)
- AOT: 小ライブラリ・プラグイン・CLI の3経路が依存あり環境で PASS(従来のプロセス版も PASS)。
- Runner: 決定フック ON でも挙動不変(短文観測のみ)。負例は FAIL を短文で観測できる。
- 配布: dist テンプレがビルドで生成可能、bin ランチャで OS 自動委譲が動作。
参照
- phase-20.10(Runner/UsingResolver 観測)、c-abi-aot.md、runner-facade.md、env-variables.md
- plugins/(AotBox の配置・ビルド方針)