2.3 KiB
2.3 KiB
Plan — Phase 20.11
- AOT 小ライブラリ + AotBox プラグイン(既定 ON: 小ライブラリ/opt-in: プラグイン)
- 小ライブラリ(libhako_aot)をコアに据え、AotBox プラグイン内部からも同APIを呼び出し(共有コア)。
- AotBox:
compile/2(json→obj),link/3(obj→exe)。効果 Io。短文診断維持。 - CLI:
hakorune --emit-exeは既定プロセス経路、小ライブラリ/プラグイン経路はゲートで選択(将来FFIへ昇格)。
- Runner → UsingResolver 決定フック(挙動不変)
- ゲート
HAKO_USING_DECISION_FROM_LANG=1で ModuleFunction の結果(JSON shape)を取得し runner で採用(失敗はFail‑Fast)。 - Rust 側は検証/整流に寄せ、二重決定を避ける(互換期間は警告のみ)。
- 配布レイアウト・UX 整備
- bin/ はランチャ(OS委譲)に限定、バイナリは target/ または dist/ に配置。
- dist/hakorune---/{bin,lib,include,docs} をテンプレ化。
- CLI:
--emit-exe(一発)+hako-aot compile/link(段階)をガイド。
- スモーク/CI 追加
- quick/llvm/aot_c_lib_compile_link_run.sh(小ライブラリ)
- quick/plugins/aot_plugin_compile_link_vm.sh(AotBox)
- quick/core/using_resolver_decision_vm.sh(ゲートONで短文観測)
- run_local_checks に dist テンプレ shape チェック(strict=warn)
- LLVM Script Builder(Hakorune スクリプト層・段階導入)
- 目標: Python llvmlite ハーネスを段階的に置換。まずは“最小命令”のIR構築をスクリプトで実装し、生成物は従来の ny-llvmc/リンカで処理。
- 境界: IR 構築のみ(箱化)。リンク/実行は既存の小ライブラリ/AotBoxが担当。Fail‑Fast(未実装命令は
UNSUPPORTED)。 - フォルダ:
lang/src/llvm_ir/(README + LAYER_GUARD)/.../boxes/(Module/Function/Builder/Types/Emit) - ゲート:
HAKO_LLVM_SCRIPT_BUILDER=1(既定OFF、opt‑in) - MVP(緑の順):
- v0: const/binop/ret(exe = 0 を生成)→ スモーク2本(const_ret / binop)
- v1: compare/branch/phi(簡易条件分岐)
- v2: call/extern(hako_* のC-ABIのみ)
- 受け入れ: 代表スモークPASS、ny-llvmc/ハーネス経路は既存のまま緑維持(opt‑inのみ影響)