2 unstable releases
Uses new Rust 2024
| new 0.2.0 | Feb 28, 2026 |
|---|---|
| 0.1.0 | Nov 30, 2025 |
#443 in Memory management
21KB
387 lines
Picket
A lightweight, serde-compatible generational arena allocator for Rust.
Picket provides a Vec-like data structure (Arena) where items are accessed via a stable, generational Index rather than a raw integer offset. This solves the ABA problem: if you remove an item and insert a new one in its place, old indices referencing the removed item will correctly fail to retrieve the new one.
Features
- Lightweight:
Indexis 8 bytes.Option<Index>is also 8 bytes usingNonZeroU32. serdeSupport: TheArenacan be serialized and deserialized through theserdefeature.- no_std: Supports
no_stdenvironments. (stdis enabled by default)
Usage
use picket::Arena;
fn main() {
let mut arena = Arena::new();
let texture_a = arena.insert("Texture A");
let texture_b = arena.insert("Texture B");
assert_eq!(arena[texture_a], "Texture A");
arena.remove(texture_a);
assert!(arena.get(texture_a).is_none());
let texture_c = arena.insert("Texture C");
assert!(arena.get(texture_a).is_none());
assert_eq!(arena[texture_c], "Texture C");
}
Dependencies
~150KB