Static copy
Copied from docs/en/adp/ADP-009-synchronous-c-abi.md in https://github.com/poppy-team/aipo-lang (MIT). Pinned to revision ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob 7da6038271708419d4783ebea10ddcfb044702dd. The source repository remains canonical; this copy is refreshed through a sync pull request, not live.
Status: accepted Date: 2026-09-24 Related: docs/adp/ADP-008-v0.1.0-language-release.md, docs/crates/crate-contracts.md, crates/aipo-host/Authority: subordinate to the canon; defines the first embedding boundary, not an engine.
aipo v0.1.0 exposes a synchronous, single-threaded, versioned C ABI. The ABI will be implemented in a separate crate, without exposing Rust structs, references, lifetimes or panics.
The internal aipo-host API remains the data contract. The C ABI is the adapter for external languages and engines.
The first version does not create threads nor expose Future, async callbacks or an event loop of its own. The language's async semantics remain internal to the runtime; step and run_until_idle may be added in a future version.
eval enters the sandboxed profile.A headless C host must:
Failure and fault;The proof must have fixtures, documentation and an ownership test. Godot, engines and plugins are later consumers, not part of this ADR.
Async will be an additive evolution of the ABI, not a silent change to v0. The future API must preserve synchronous execution and add only the pump/event loop operations the host needs.
Send/Sync in the VM.eval or arbitrary memory access.