.NET's GC is mature, but it sits behind JIT tiers, write barriers tuned for generational assumptions, and a large managed object header story—fine for long-lived services, heavy for tight CLIs and fiber-heavy workloads.
Beskid ships `abfall`: a concurrent tri-color tracing mark-and-sweep heap with Idle → Marking → Sweeping phases, a background collector thread that marks in bounded work budgets, Dijkstra insertion barriers during marking, and brief STW only for root scanning—same architectural family as Go's concurrent collector.
Codegen emits `TypeDescriptor` pointer layouts and calls `gc_write_barrier` on pointer stores (`beskid_codegen` struct/enum literal lowering → `beskid_runtime::gc_write_barrier` → `Heap::write_barrier`). Fibers allocate through `Heap::allocate_beskid`; GC tests cover fiber allocations, channel waits under collection, and concurrent mutation (`gc_concurrency.rs`, `abfall/tests/gc_functional.rs`).
The runtime shares one `Arc<Heap>` across mutator threads; collection pacing is configurable (`GcOptions` incremental budgets), so throughput targets Go-like “collector runs beside mutators” behavior rather than stop-the-world-only heaps.