Parallel GC mutators need write barriers, stack-map coverage, and scheduler coordination. Shipping partial parallel GC risks data races on the Abfall heap.
Verification and traceability
Platform spec article
Verification and traceability
Spec standingStandard
-
v0.2 targets single mutator; Phase B requires spec and barrier completion first.
Context
Decision
Phase Mutators Ship order A (v0.2) One Beskid mutator; many cooperative fibers Default ship B (v0.3, opt-in) Parallel mutators + real gc_write_barrieron pointer-payload channels + syscall-pool guardWired behind BESKID_RUNTIME_PHASE_B/set_runtime_phase(RuntimePhase::PhaseB); stays opt-in until preemption emission and concurrent-mark stress landB (later) Phase B becomes the default Requires AOT/JIT to insert runtime_preempt_checkprologues and full concurrent-mark stress coveragePhase B must not become the default without updating this feature hub and fiber scheduler contracts.
Consequences
Phase A barriers stay correct because Phase B reuses the same Dijkstra insertion barrier; the difference is that Phase B exercises it on multi-mutator workloads and on pointer-payload channel ops. Fiber/feature docs cross-link Phase tables.
Verification anchors
GC integration tests under
crates/beskid_runtime/tests/:tests/concurrency.rs— channel/scheduler coretests/gc.rs,tests/gc_concurrency.rs— Phase A heap and root handlestests/phase_b_concurrency.rs— Phase B multi-mutator stress, pointer-payload channels with write barriers, syscall-pool guard, optional preemption hook
Platform-spec Phase diagrams in hub and design model.
-
Reference runtime uses vendored Abfall mark/sweep with barriered stores.
Context
The prior arena model needed a collector that supports concurrent marking and precise scanning with compiler-emitted descriptors.
Decision
Component Role Abfall Tri-color mark/sweep heap integrated in beskid_runtime::gcBarriers gc_write_barrieron pointer stores during markingSTW Limited stop-the-world for root scan and phase transitions Snapshots GcSnapshot/enter_runtime_scopefor host toolingGit anchor:
6ecd493(vendored Abfall + Beskid heap integration).Consequences
Lowering must emit barriers where Phase requires them. Hosts attach runtime scope before JIT/AOT execution.
Verification anchors
compiler/crates/beskid_runtime/src/gc/; JIT runtime tests. -
alloc attaches descriptors; roots include stacks, globals, and handles.
Context
Conservative stack scanning alone is insufficient for precise Beskid object graphs across fibers and codegen optimizations.
Decision
Rule Detail Header Heap objects begin with a type descriptor pointer for precise scan Allocation alloc(size, type_desc)usesabfall::Heap::allocate_beskidStrings / arrays BeskidStr,BeskidArrayheaders per builtins layoutRoots Stacks (stack maps), globals (registered roots), gc_root_handleexternalsCompiler Lowers descriptors and stack maps; does not embed collector policy Consequences
Descriptor schema changes are ABI-visible per D-EXEC-ABI-0002.
Verification anchors
beskid_codegenstack maps;beskid_runtimealloc/GC tests.
- Contracts and edge cases MUST rules for allocation, barriers, roots, and Phase A mutator exclusivity.
- Design model Heap ownership, tri-color GC, Phase A mutator rules, and compiler/runtime split.
- Examples Allocation failures, GC pacing triggers, and external root pinning scenarios.
- FAQ and troubleshooting GC pauses, mutator violations, barrier omissions, and heap growth debugging.
- Flow and algorithm Allocation, barrier insertion, collection pacing, and safepoint algorithms.
- Verification and traceability Runtime GC tests, Abfall integration, and compiler stack-map obligations.
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).
Implementation anchors
Section titled “Implementation anchors”| Path | Role |
|---|---|
compiler/crates/beskid_runtime/src/gc.rs | Scope, heap TLS, collection drivers |
compiler/crates/beskid_runtime/src/builtins/gc.rs | Exported gc_* builtins |
compiler/crates/beskid_runtime/src/builtins/alloc.rs | alloc entry |
compiler/crates/abfall/ | Tri-color heap implementation |
compiler/crates/beskid_codegen | Stack maps, barrier insertion, descriptors |
compiler/crates/beskid_tests/src/runtime/jit.rs | JIT + GC integration |
Tests and benches
Section titled “Tests and benches”| Target | Coverage |
|---|---|
beskid_tests runtime JIT | Alloc + collect under execution |
beskid_runtime runtime_micro bench | Hot path regression guard |
| Future conformance | Stack map completeness per function (Phase B gate) |
Requirement traceability
Section titled “Requirement traceability”| ID | Evidence |
|---|---|
| GC-001 | Descriptor emission tests in codegen artifacts |
| GC-002 | CLIF inspection / lowering unit tests for barrier calls |
| GC-003 | Fiber scheduler tests + code review of enter_runtime_scope |
| GC-004 | Host GcSnapshot / force_collect tests |