Interop.Contracts primitives need a single C profile authority for tier-1 hosts.
C ABI profile — C layout types (v0.3.1)
Platform spec article
C ABI profile — C layout types (v0.3.1)
Spec standingProposed
-
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).
Status: Proposed (v0.3.1) — Normative text is stable for planning; reference compiler support must trail interop view types (v0.3.0 Standard).
Delivery order
Section titled “Delivery order”- v0.3.0 Standard — interop views, link-time import, export/callback registration.
- v0.3.1 —
CLayouton Beskidtypedeclarations for FFI-by-value structs with primitive fields only. - Later — nested records, enums with defined representation, arrays inside FFI structs, and WinAPI-specific calling conventions (not stdlib tier-1).
CLayout attribute (planned)
Section titled “CLayout attribute (planned)”[CLayout(Align: 4)]pub type WinSize { i32 ws_row, i32 ws_col, i32 ws_xpixel, i32 ws_ypixel,}| Rule | v0.3.1 |
|---|---|
| Field types | Primitives and other CLayout types only |
Beskid string / T[] inside struct | Forbidden |
| Enums | Forbidden until discriminant/size rules exist |
| Alignment / pack | Explicit Align / Pack; default platform C rules |
Complex types (explicitly later)
Section titled “Complex types (explicitly later)”The platform will specify nested FFI structs, fixed-size array fields, and enum ABI after basic FFI (views + link + export) is implemented and covered by conformance tests. Until then, authors must use interop views, pointers as opaque i64, or thin C shims.
Stdlib note
Section titled “Stdlib note”WinAPI and stdcall layouts are out of scope for standard library tier-1 packages. Windows-focused mappings may appear in optional platform packages under Proposed profiles, not as corelib Standard requirements.