Why arena-lib
Allocator-aware Rust normally means juggling three or four crates: one for slab storage, one for handle stability, one for string interning, plus a bump arena for short-lived scratch. arena-lib collects those primitives behind a single, safe, REPS-disciplined surface so you can move fast without paying for it later.
Designed around four guarantees:
- Typed arenas — one backing allocation per element type, predictable layout, cache-friendly traversal.
- Generational indices — stable handles that catch use-after-free without reference counting.
- String interning — O(1) equality and compact storage for repeated identifiers.
- Bump allocation — short-lived scratch regions that reset in constant time.
Every public path is safe Rust. unsafe lives only in measured, documented internals — never in your call sites.
Status: v0.9.0 (Hardening + Audit). The 0.5 surface is feature-frozen; every public item carries a documented example, property tests cover the arena, interner, bump, and drop-arena invariants, and a runnable
examples/quick_start.rsexercises all four primitives end-to-end. Audit findings are logged in docs/release/v0.9.0.md. Next release is the 1.0 freeze.
Quick start
Add the crate to your Cargo.toml:
[]
= "0.9"
End-to-end use of every primitive:
use *;
See docs/API.md for the full reference, including the planned 1.0 surface.
Standards
- REPS governs every decision. See REPS.md.
- MSRV: Rust 1.85.
- Edition: 2024.
- Cross-platform: Linux, macOS, Windows.
License
Dual-licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
at your option.