Interop.Contracts primitives need a single C profile authority for tier-1 hosts.
C ABI profile — Interop view types (v0.3.0)
Platform spec article
C ABI profile — Interop view types (v0.3.0)
Spec standingStandard
-
C/System V binding rules defer to this hub.
Context
Decision
This feature hub must own normative MUST/SHOULD for C-compatible foreign libraries. Sibling articles add detail without redefining hub MUST tables.
Consequences
Cranelift lowering and foreign library import tooling align to this profile.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/
-
dlopen is not Standard conformance for tier-1.
Context
Dynamic resolution complicates reproducible builds and CI conformance.
Decision
v0.3 Standard tier-1 conformance must use link-time library binding (link-time linking).
Consequences
Engine may retain Proposed
extern_dlopenpaths separately from Standard claims.Verification anchors
compiler/crates/beskid_codegen; Foreign library import. -
Dynamic resolution profile is non-Standard.
Context
Some hosts want late binding; tier-1 reference path standardizes link-time.
Decision
Runtime
dlopen/dlsymresolution is demoted to the dynamic resolution profile (Proposed appendix, not Standard).Consequences
Documentation and conformance matrices must not require dlopen for Standard tier-1.
Verification anchors
compiler/crates/beskid_engine/src/engine.rs(extern_dlopen, Proposed). -
Windows user-extern linking not tier-1 Standard in corelib.
Context
WinAPI/stdcall surfaces belong in platform packages with distinct conformance tiers.
Decision
WinAPI / stdcall as a stdlib concern is out of scope for tier-1 Standard conformance; platform packages may document Proposed mappings separately.
Consequences
Platform tier matrix records host-specific tiers.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/
-
Delivery bands separate Standard views from Proposed layout structs.
Context
Implementers need a spec-first schedule when codegen trails text.
Decision
Band Content Status v0.3.0 Interop views, link-time import, symbol overrides Standard (spec; impl may trail) v0.3.1 CLayoutprimitive structsProposed Later Nested FFI structs, enum ABI, foreign-thread entry Planned Consequences
Articles tag Proposed vs Standard explicitly; CI strict mode can gate premature Standard claims.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/ and child articles.
- C ABI profile — C layout types (v0.3.1) repr(C) records for FFI after interop views ship; nested complex types deferred.
- C ABI profile — Dynamic resolution profile Non-Standard appendix for runtime dlopen/dlsym extern resolution (legacy v0.1 path).
- C ABI profile — Extern contracts and linking Library and symbol metadata, JIT dlopen resolution, and policy gates for user extern contracts.
- C ABI profile — Interop view types (v0.3.0) CStringView, CBuffer, and CArrayView layouts for user Extern boundaries.
- C ABI profile — Link-time linking Normative link-time binding for user Extern libraries (v0.3 Standard).
- C ABI profile — Platform tier matrix Tier-1 Standard hosts vs Proposed platforms; WinAPI out of stdlib scope.
- C ABI profile — Types and call conventions Permitted C ABI representations for Beskid extern contract parameters and returns in the reference compiler.
0 revisions (git unavailable at build; counts may be empty)
No commits recorded for this path.
| Section id | Required | Found |
|---|---|---|
what-this-feature-specifies | yes | yes |
implementation-anchors | yes | yes |
Full tree: run pnpm verify:platform-spec-layout (writes src/generated/platform-spec-layout-report.json).
Purpose
Section titled “Purpose”v0.3.0 introduces interop view types: transparent records with stable C layout used only at FFI boundaries. They align with runtime repr(C) helpers in compiler/crates/beskid_abi/src/types.rs without exposing GC-managed Beskid string or T[] directly.
Canonical definitions should live in corelib under an Interop package (exact package id is a corelib layout decision).
Normative layouts (tier-1, 64-bit)
Section titled “Normative layouts (tier-1, 64-bit)”Layouts use pointer-sized fields in C ABI order.
CStringView
Section titled “CStringView”UTF-8 byte range (does not imply null termination on the foreign side unless documented).
| Field | Type | Meaning |
|---|---|---|
ptr | pointer / i64 | Start of bytes |
len | i64 | Byte length |
Maps to BeskidStr at the runtime embedding boundary.
CBuffer
Section titled “CBuffer”Read/write byte range.
| Field | Type | Meaning |
|---|---|---|
ptr | pointer / i64 | Start of bytes |
len | i64 | Logical length |
CArrayView
Section titled “CArrayView”Fat-pointer compatible with runtime arrays.
| Field | Type | Meaning |
|---|---|---|
ptr | pointer / i64 | Element storage |
len | i64 | Logical element count |
cap | i64 | Capacity |
Maps to BeskidArray where the profile documents element size separately.
Permitted primitives (v0.3.0)
Section titled “Permitted primitives (v0.3.0)”bool (as i8 at boundary), u8, i32, i64, f64, unit, interop views above, and ref u8 (legacy narrow slice start — prefer views).
Lowering
Section titled “Lowering”The C ABI profile lowers views to a flat list of machine parameters per System V AMD64 (pointer and integer slots). The engine signature validator must accept only types expressible in that flat list.
After basic FFI
Section titled “After basic FFI”CLayout records with primitive fields only arrive in v0.3.1 (C layout types). Nested structs, enums, and arrays inside FFI structs remain deferred until that band is stable.