PackageTrack
Sign in Get early access

immutable-chunkmap

A fast immutable map and set with batch insert and update methods, COW operations, and big O efficient implementations of set and merge operations

2.1.3 5.0M downloads/mo #4512 most downloaded on crates.io estokes/immutable-chunkmap

What this package is like to depend on

Last release 1 months ago

08 Jul 2026

Ships fairly regularly

a new release about every 5 months

Nearly every release is documented

notes for 31 of 34 stable releases

4 versions withdrawn

withdrawn after publishing

9 years old

38 releases · first in 2017

4 releases in the last 12 months

see the full history below

Release timeline

38 releases · Dec 2017 to Jul 2026
2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 38
  1. 2.1.3 08 Jul 2026
    Release notes
    • when pool is on add support for droping deeply nested maps in constant stack space
    Open source →
  2. 2.1.2 10 Sep 2025
    Release notes
    • fix unsoundness pooling tree nodes, now reenabled
    Open source →
  3. 2.1.1 09 Sep 2025
    Release notes
    • stop pooling tree nodes, because of notch analysis they can never meet the safety requirements of IsoPoolable.
    Open source →
  4. 2.1.0 30 Aug 2025 withdrawn
    Release notes
    • add an optional feature "pool". If enabled memory allocation is greatly reduced by reusing tree components instead of freeing them. The performance improvement depends on key type and tree size but can be as high as %30 for plain insert/remove on very large maps. Memory fragmentation will also be greatly reduced, but this is much harder to measure.

    • pool is not compatible with no_std

    • fix a number of test bugs (actual bugs in the TEST code, not the tree) that cropped up when running model checking for multiple days continuously

    Open source →
  5. 2.0.6 21 Oct 2024
    Release notes
    • merge #10, no_std support (alloc required)
    Open source →
  6. 2.0.5 20 May 2024
    Release notes
    • merge #8 hand coded packing of height/size to remove the dependency on packed struct

    • fix a few bugs in the model checking COW tests

    Open source →
  7. 2.0.4 04 Feb 2024
    Release notes
    • remove redundant type parameter from iter_mut_cow
    Open source →
  8. 2.0.3 03 Feb 2024
    Release notes
    • implement iter_mut_cow, range_mut_cow, for copy on write iterators
    Open source →
  9. 2.0.2 23 Oct 2023
    Release notes
    • implement get_or_insert_cow and get_or_default_cow
    Open source →
  10. 2.0.1 23 Oct 2023
    Release notes
    • implement get_mut_cow to improve the ergonomics of using nested maps with COW operations
    Open source →
  11. 2.0.0 22 Jun 2023
    Release notes
    • fix the range api to match the standard library. Sorry about the previous two releases, it's actually quite a subtle api and I consistently got it wrong. I also got semantic versioning wrong, and I'm really sorry about that, I hope nothing broke annoyingly for anyone (aside from for me :))
    Open source →
  12. 1.1.1 20 Jun 2023 withdrawn
    Release notes
    • fix ?Sized on range
    Open source →
  13. 1.1.0 20 Jun 2023 withdrawn
    Release notes
    • fix the arguments to range to have the correct borrow type
    Open source →
  14. 1.0.5 23 Dec 2022
    Release notes
    • add remove_many, a small wrapper around update_many
    • fix a bug in update_many where trying to remove elements that don't exist in the map could cause a panic. Add a test for this case.
    Open source →
  15. 1.0.4 03 Sep 2022
    Release notes
    • add optional rayon support for map and set
    Open source →
  16. 1.0.3 29 Aug 2022
    Release notes
    • add optional serde support for map and set
    Open source →
  17. 1.0.2 28 Aug 2022
    Release notes
    • stop depending on serde by default
    Open source →
  18. 1.0.1 24 Sep 2021
    Release notes
    • replace vec chunks with arrayvec chunks to eliminate an indirection
    • implement tree compaction to keep inner chunks from getting too sparse

    1.0.0 "the cake is not a lie"

    • Add copy on write mutable operations. They are 10x faster than plain insert/remove, and bring update performance within an 2-3x of BTreeMap (with ArcStr keys).

    • Chunk size is now configurable with a const generic parameter. Three different sizes are exposed as default type aliases.

    • bump dependencies, update readme, and refresh the benchmarks

    • feels like 1.0 to me!

    Open source →
  19. 1.0.0 17 Sep 2021

    Nothing published for this version

  20. 0.5.9 30 Oct 2020
    Release notes
    • add weak references to maps and sets as well as methods to get the strong and weak count of map/set references.
    Open source →
  21. 0.5.8 03 Nov 2019
    Release notes
    • further 20% performance improvement on batch update operations.
    Open source →
  22. 0.5.7 28 Oct 2019
    Release notes
    • improve performance of batch update operations on unsorted data by a large amount (7x on trees of size 10million and chunks of size 100k).
    Open source →
  23. 0.5.6 21 Oct 2019
    Release notes
    • packed the height and length together, which reduced the size of nodes by 1 word. That reduction gets us a 1-2% improvement in lookup times (more benefit for larger trees). Tree length is now limited to 2^56 elements instead of usize::MAX elements.

    • made the tests run faster by wrapping strings in Arcs, which is closer to how you'd use them in a real program anyway.

    Open source →
  24. 0.5.5 14 Oct 2019
    Release notes
    • small performance optimizations update operations
    Open source →
  25. 0.5.4 13 Feb 2019
    Release notes
    • Edition 2018
    Open source →
  26. 0.5.3 21 Jan 2019
    Release notes
    • implement Set::diff, and Map::diff, O(log(N) + M) where M is the number of intersecting chunks. Now all the fundamental set operations are implemented.
    • rename Map::merge to Map::union. Sorry for the tiny break in semantic versioning, but given it was just released I don't think it's a huge problem to change it now.
    Open source →
  27. 0.5.2 01 Jan 2019
    Release notes
    • implement Set::intersect, and Map::intersect, O(log(N) + M) where M is the number of intersecting chunks.
    Open source →
  28. 0.5.1 11 Dec 2018
    Release notes
    • implement Set::union, and Map::merge, O(log(N) + M) where M is the number of intersecting chunks and N is the size of the largest tree. Should always be as fast as update_many from the other map's iterator, a lot faster in the case of a small intersection.
    • remove my silly &mut F requirement for closure arguments to functions in the public interface. Sorry I'm still learning rust, I didn't know FnMut was also implemented by a &mut.
    Open source →
  29. 0.5.0 20 Jul 2018
    Release notes
    • implement map get_key, get_full
    • implement set update_many
    • fix some incorrect documentation
    • BREAKING change map and set update functions so they are able to work with borrowed forms of the key
    Open source →
  30. 0.4.1 17 Jul 2018
    Release notes
    • implement get in the set module
    • properly implement Ord, PartialOrd, Eq, PartialEq, Hash, and Debug
    Open source →
  31. 0.4.0 16 Jul 2018
    Release notes
    • add a set module
    • remove the rc and arc modules. There is no observable performance difference between rc and arc, so just use arc everywhere. This is especially relevant because all the practical applications of this library than I know about require using Arc.
    • BREAKING: fix return type of insert and remove to match BTreeMap
    Open source →
  32. 0.3.1 13 Jul 2018
    Release notes
    • fix a bug in update_many that could rarely cause a removed item not to be removed
    Open source →
  33. 0.3.0 11 Jul 2018 withdrawn
    Release notes
    • BREAKING: change the name of insert_sorted to insert_many
    • add update, and update_many
    • insert 14% performance improvement
    • insert_many 42% performance improvement on unsorted data, now faster than insert on random data
    Open source →
  34. 0.2.1 06 Jul 2018
    Release notes
    • BREAKING: change signature of insert to match BTreeMap as closely as possible. Sorry I was new to rust when I first wrote this module :-(
    Open source →
  35. 0.2.0 05 Jul 2018
    Release notes
    • iteration runs in constant space
    • Implement collection range api
    • Implement DoubleEndedIterator
    • insert_sorted performance improved on degenerate cases
    • BREAKING: insert_sorted now takes IntoIterator instead of an explicit slice
    • BREAKING: change the name of length to len, like BTreeMap
    Open source →
  36. 0.1.2 26 Dec 2017
    Release notes
    • Initial public release
    Open source →
  37. 0.1.1 26 Dec 2017

    Nothing published for this version

  38. 0.1.0 26 Dec 2017

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive