Show HN: Scope-structured arena memory for C, O(1) cleanup, no GC/borrow checker
github.comAriandel is a memory model where every heap object lives in a scope-owned arena. Scope exit resets the arena in O(1) — one bump pointer write and one free — regardless of how many objects were allocated.
The safety default: allocating functions return ARENA_PTR handles (packed arena_id + offset integers), not raw pointers. A dangling pointer at a function return boundary is unconstructable by default. Cross-scope lifetime extension is explicit — you enter the target arena via SCOPE(ptr) before allocating, which routes the object into the outer arena without transferring ownership.
Benchmarks (no optimization flags): 1M-node tree cleanup drops from 31ms to 1ms (~30×). There's a real regression in tight inner loops (~0.76×) because DEREF can't hoist the base pointer the way a compiler would — the spec documents this honestly.
This is a C macro-based proof-of-concept for a memory model I'm targeting in a compiled language. The interesting question isn't the C implementation — it's whether scope-structured arena routing is a sound replacement for GC and borrow checking across the class of programs that matter.
Repo: https://github.com/hollow-arena/ariandel — SPEC.md has the full model including concurrency semantics and the comparison to Tofte & Talpin region-based memory.
Clean approach. We deal with similar memory lifecycle problems in a PHP async extension (C, libuv-based reactor). Coroutine stacks and their associated state need deterministic cleanup when a coroutine completes or gets cancelled — arenas with scope-based cleanup would be a natural fit there.
The O(1) cleanup claim is interesting. How does it handle cross-arena references? In our case a coroutine can capture a reference to an object owned by a parent scope, and that's where simple arena strategies usually fall apart.