37 lines
1.4 KiB
Markdown
37 lines
1.4 KiB
Markdown
|
|
# C‑ABI Bridge v0 (Phase 20.38)
|
|||
|
|
|
|||
|
|
Purpose
|
|||
|
|
- Provide a minimal, guarded bridge from Hakorune VM to Rust extern providers without changing behavior.
|
|||
|
|
- Keep default OFF; use tags for observability, return empty string to keep rc=0.
|
|||
|
|
|
|||
|
|
Scope (v0)
|
|||
|
|
- Supported names (Extern):
|
|||
|
|
- `env.mirbuilder.emit` — program_json → mir_json
|
|||
|
|
- `env.codegen.emit_object` — mir_json → object path
|
|||
|
|
- Call shapes:
|
|||
|
|
- Hako provider: `HakoruneExternProviderBox.get(name, arg)`
|
|||
|
|
- Legacy global: `hostbridge.extern_invoke(name, method, [arg])`
|
|||
|
|
|
|||
|
|
Behavior
|
|||
|
|
- When `HAKO_V1_EXTERN_PROVIDER=1` (provider ON):
|
|||
|
|
- Hako provider returns empty string (`""`), rc remains 0.
|
|||
|
|
- When `HAKO_V1_EXTERN_PROVIDER_C_ABI=1` (C‑ABI tag ON):
|
|||
|
|
- Provider prints tags to stderr: `[extern/c-abi:mirbuilder.emit]`, `[extern/c-abi:codegen.emit_object]`.
|
|||
|
|
- Return remains empty string (rc=0)。
|
|||
|
|
|
|||
|
|
Toggles
|
|||
|
|
- `HAKO_V1_EXTERN_PROVIDER=1` — enable provider path (default OFF).
|
|||
|
|
- `HAKO_V1_EXTERN_PROVIDER_C_ABI=1` — emit C‑ABI tags (default OFF).
|
|||
|
|
|
|||
|
|
Verify
|
|||
|
|
- Use Hakorune primary path (`HAKO_VERIFY_PRIMARY=hakovm`)
|
|||
|
|
- Pass JSON via env: `NYASH_VERIFY_JSON`
|
|||
|
|
- rc extraction: last numeric line
|
|||
|
|
|
|||
|
|
Rollback/Disable
|
|||
|
|
- Unset `HAKO_V1_EXTERN_PROVIDER` (and `HAKO_V1_EXTERN_PROVIDER_C_ABI`) to restore pure stub behavior.
|
|||
|
|
|
|||
|
|
Notes
|
|||
|
|
- v0 is intentionally minimal and behavior‑preserving. v1 may return real values and propagate errors under flags.
|
|||
|
|
|