Edva executes without a garbage collector or runtime type headers. Memory is managed deterministically through stack values, scoped bump arenas, explicit Builder buffers, and raw Addr pointers for low-level systems and C FFI interoperability.
15.1 Runtime value and memory model
Category
Types
Allocation & Passing Model
Immediate register values
Int, i8..u64, Float, f32, Rune, <>, Addr, ()
Held directly in CPU/SIMD registers and stack slots; zero heap allocation
Unboxed descriptors / pairs
String (16B), T[] (16B), A => B (16B), RamPP{ i1, i64 } (16B), Enum{ i64, ptr } (16B)
Descriptors pass by value in registers; pointed-to payload bytes live in the active arena
Growable arena containers
Builder (24B), T{} (24B), K ^ V (ptr)
Backing buffers allocate and double in the active arena
Deep copy (++x)
String, Builder, Record, T{}, T[]
Allocates a fresh copy in the current arena (use before arena scope exit to promote values)
State binding lens (~~lvalue)
Mutable variable x', field r.f, array slot xs(i), map slot m ^ k
Constructs a two-way accessor record (get: () => T, set: T => ())