NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #916 most downloaded on crates.io
A collection of high-performance asynchronous/concurrent containers with both asynchronous and synchronous interfaces
Last release 1 months ago
01 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 51 of 54 stable releases
200 versions withdrawn
withdrawn after publishing
6 years old
254 releases · first in 2020
One column per quarter.
Enhance the wait queue implementation.
* Minor code cleanup.
* New API. ### API update * See `#108`. ## Version 1
API update: add the hash_index::Entry API.
hash_index::Entry API.API update: add ebr::{AtomicOwned, Owned} for non-reference-counted instances.
ebr::{AtomicOwned, Owned} for non-reference-counted instances.API update: add ebr::AtomicArc::compare_exchange_weak.
ebr::AtomicArc::compare_exchange_weak.API update: #107 add HashMap::{prune, prune_async}.
HashMap::{prune, prune_async}.API update: add HashCache::{contains, contains_async}.
HashCache::{contains, contains_async}.API update: overhaul hash_cache::Entry API; values can be evicted through hash_cache::Entry API.
hash_cache::Entry API; values can be evicted through hash_cache::Entry API.Add Bag::pop_all and Stack::pop_all.
Bag::pop_all and Stack::pop_all.Add HashCache::{any, any_async, for_each, for_each_async, read, read_async}.
HashCache::{any, any_async, for_each, for_each_async, read, read_async}.Add Serde support to HashCache.
Serde support to HashCache.Optimize Hash*::update* and HashIndex::modify*.
Hash*::update* and HashIndex::modify*.HashCache minimal implementation.HashMap::{get, get_async} returning an OccupiedEntry.Hash*::capacity_range.API update 1: #96 - add HashIndex::{modify, modify_async}, special thanks to novacrazy.
API update: add HashIndex::{retain, retain_async}.
HashIndex::{retain, retain_async}.API update: add a mutable Bag iterator.
Bag iterator.compare_exchange with compare_exchange_weak where spurious failures do not cost much.hash_map::Reserve::fmt which printed superfluous information.API update 1: remove ebr::Barrier::defer_incremental_execute in favor of unwind-safety.
ebr::Barrier::defer_incremental_execute in favor of unwind-safety.hash_map::OccupiedEntry and hash_map::VacantEntry are now UnwindSafe.linked_list::Entry as LinkedEntry.API update: HashMap::remove_if* passes &mut V to the supplied predicate.
HashMap::remove_if* passes &mut V to the supplied predicate.Major Hash* performance boost: vectorize Hash* bucket lookup operations.
Hash* performance boost: vectorize Hash* bucket lookup operations.Add const ARRAY_LEN: usize type parameter to Bag.
const ARRAY_LEN: usize type parameter to Bag.* Optimize TreeIndex::is_empty. * Update documentation.
TreeIndex::is_empty.Add hash_index::Reserve and HashIndex::reserve.
hash_index::Reserve and HashIndex::reserve.H = RandomState to several types.const to several trivial functions.Fix a correctness issue with LLVM 16 (Rust 1.70.0).
{Stack, Queue}::{peek*} receive FnOnce(Option<&Entry<T>>) -> R.RandomState is now the default type parameter for hash_* structures.Sync requirements.'static lifetime constraints from Bag, LinkedList, Queue, and Stack.Hash* optimization.Add HashMap::first_occupied_entry* for more flexible mutable iteration over entries.
HashMap::first_occupied_entry* for more flexible mutable iteration over entries.ebr::Arc::get_ref_with.Send for hash_map::Entry if (K, V): Send.Hash*::remove* methods may deallocate the entire hash table when they find the container empty.API update 1: AtomicArc::update_tag_if now receives fetch_order, and the closure can access the pointer value.
AtomicArc::update_tag_if now receives fetch_order, and the closure can access the pointer value.hash_map::Ticket to hash_map::Reserve.Hash* do not allocate bucket arrays until the first write access.Hash*::remove* more aggressively shrinks the bucket array.Nothing published for this version
Remove unnecessary lifetime constraints on BuildHasher.
Hash*::is_empty.BuildHasher.EBR garbage instances and the garbage collector instance of a thread are now deallocated immediately when the thread exits if certain conditions are m
* Fix #86.
Fix a rare problem with HashMap and HashSet violating lifetime contracts on drop.
HashMap and HashSet violating lifetime contracts on drop.Remove 'static bounds from HashMap, HashSet, and ebr::{Arc, AtomicArc}.
'static bounds from HashMap, HashSet, and ebr::{Arc, AtomicArc}.Add HashMap::{entry, entry_async}.
HashMap::{entry, entry_async}.* More robust panic handling. * Doc update.
Minor performance optimization.
HashIndex::read, and made it non-blocking.Optimize TreeIndex for low-entropy input patterns.
TreeIndex for low-entropy input patterns.Add {HashMap, HashSet}::{any, any_async} to emulate Iterator::any.
{HashMap, HashSet}::{any, any_async} to emulate Iterator::any.PartialEq for {HashMap, HashSet, HashIndex, TreeIndex}.serde support to {HashMap, HashSet, HashIndex, TreeIndex}.Send bound from TreeIndex.* Minor Hash* optimization.
Hash* optimization.Major TreeIndex performance improvement.
TreeIndex performance improvement.From<ebr::Tag> for u8.* Optimize TreeIndex.
TreeIndex.API update 1: remove Bag::clone.
Stack.Bag::clone.Queue::Entry with <linked_list::Entry as LinkedList>.Bag.Bag::drop.* Implement Bag. ## Version 0
Bag.* Remove scopeguard.
scopeguard.* Minor ebr optimization.
ebr optimization.* Hash*::remove* accept FnOnce.
Hash*::remove* accept FnOnce.HashMap::read, HashIndex::read, and HashIndex::read_with accept FnOnce.
HashMap::read, HashIndex::read, and HashIndex::read_with accept FnOnce.T: Copy and !needs_drop::<T>().More aggressive EBR garbage collection.
* Fix #84 completely. * Micro-optimization.
Optimize performance for T: Copy.
T: Copy.0.11.2 and any older versions have a serious correctness problem with Rust 1.65.0 and newer.
HashIndex and HashMap cleanup entries immediately when the instance is dropped.
HashIndex and HashMap cleanup entries immediately when the instance is dropped.Adjust HashIndex parameters to suppress latency spikes.
HashIndex parameters to suppress latency spikes.Replace ebr::Barrier::reclaim with ebr::Arc::release.
ebr::Barrier::reclaim with ebr::Arc::release.ebr::Arc::drop_in_place to ebr::Arc::release_drop_in_place.ebr::Barrier::defer.ebr::Collectible public.Implement ebr::Barrier::defer_incremental_execute.
ebr::Barrier::defer_incremental_execute.Significant HashMap, HashSet, and HashIndex insert performance improvement by segregating zero and non-zero memory regions.
HashMap, HashSet, and HashIndex insert performance improvement by segregating zero and non-zero memory regions.Nothing published for this version
HashMap, HashSet, and HashIndex performance improvement.
HashMap, HashSet, and HashIndex performance improvement.API update: HashMap::new, HashIndex::new, and HashSet::new.
HashMap::new, HashIndex::new, and HashSet::new.unsafe HashIndex::update for linearizability.Implement ebr::Barrier::defer_execute for deferred closure execution.
ebr::Barrier::defer_execute for deferred closure execution.Fix ebr::AtomicArc::{clone, get_arc} to never return a null pointer if the ebr::AtomicArc is always non-null.
ebr::AtomicArc::{clone, get_arc} to never return a null pointer if the ebr::AtomicArc is always non-null.* Fix #77.
Your coding agent can read these notes before it upgrades. Set up the MCP server →