Files
hakorune/docs/guides/c-abi-bridge-v0.md

1.4 KiB
Raw Blame History

CABI 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 (CABI 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 CABI 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 behaviorpreserving. v1 may return real values and propagate errors under flags.