| Crates.io | blazinterner |
| lib.rs | blazinterner |
| version | 0.1.0 |
| created_at | 2026-01-17 20:47:51.774676+00 |
| updated_at | 2026-01-17 20:47:51.774676+00 |
| description | Efficient and concurrent interning of generic data |
| homepage | |
| repository | https://github.com/gendx/blazinterner |
| max_upload_size | |
| id | 2051128 |
| size | 51,962 |
Here are the main features offered by this crate.
Hash and Eq, not
just strings. The interned type doesn't even have to be Sized (for example
str), as long as you provide a Sized storage type (such as Box<str>)
that can be borrowed as the interned type.Interned value contains only a 32-bit index. The
corresponding Arena stores each value directly in an AppendVec, plus the
32-bit index in a raw hash table (DashTable). To intern a value of type T
using storage type S, you can pass any type that implements Borrow<T> and
Into<S>, which allows avoiding unnecessary copies. For example, in an
Arena<str, Box<str>> you can intern many string types: &str, String,
Box<str>, Cow<'_, str>, etc.Arena is Sync, and allows simultaneous reads and
writes. More specifically, retrieving values via Interned::lookup() and
Interned::lookup_ref() is always wait-free, even when a write happens
concurrently! This is thanks to the underlying AppendVec implementation.
However, only one write (using Interned::from()) can happen at a time on a
given arena, due to an exclusive write lock.