NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4529 most downloaded on crates.io
Integer sets as fast, sorted integer ranges; Maps with integer-range keys; Full set operations
Last release 22 days ago
15 Sep 2026
Release timing varies
gaps range from 8 days to 13 months
Some releases are documented
notes for 14 of 25 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
34 releases · first in 2023
One column per quarter.
…types to the crate's Integer trait, removing deprecated warnings that arose because Rust resolves those names to std's deprecated inherent methods bef…
cursor_nightly_experimental feature, which uses Rust'sinsert/ranges_insert on bothRangeSetBlaze (~2x) and RangeMapBlaze (~1.7x), with the same public API.f32 and f64, plus range_at,range_or_gap_at, and fill_gaps, are now unconditional public APIs.RangeSetBlaze::fill_gaps returns a RangeMapBlaze<T, bool> andRangeMapBlaze::fill_gaps returns a RangeMapBlaze<T, Option<V>>, followingSortedDisjoint::fill_gaps andSortedDisjointMap::fill_gaps return the lazy streamsFillGapsIter and FillGapsIterMap) for advanced composition. Both coverT::min_value() through T::max_value().FillGapsIterMap and FillGapsIter now implement SortedDisjointMap and can beRangeMapBlaze<T, Option<V>> andRangeMapBlaze<T, bool>, respectively. bool now implements ValueCarrier asdocs/release_checklist.md, the canonical release procedure, and aFillGapsIter/FillGapsIterMap that resolved to the wrong.html path insteadcrate:: path; this broke once a type implementingSortedDisjoint/SortedDisjointMap first existed in a nested module (gaps).cursor_nightly_experimental/float_nightly_experimental checks, Clippy, and docs) is now pinned to a fixednightly, mirroring the already-pinnedrust-toolchain.toml. A floating nightly previously brokesingle_range_in_vec_init lint against thisfrom_iter([a..=b]) single-range construction; that lint isapt-get package installawalsh128/cache-apt-pkgs-action reportsmin_value()/max_value() calls on concrete primitiveInteger trait, removing deprecated warningsrog_experimental and float_experimental Cargo features. Removefloat_nightly_experimental remains forf16 and f128 support.Rog, RogsIter, and the old rogs_* methods. Use range_at,range_or_gap_at, or fill_gaps instead.ValueRef to ValueCarrier and redesigned it with a Valuevalue_eq method; generic code now uses explicitFinite/FiniteF32/FiniteF64/FiniteF16/FiniteF128 toNotNan/NotNanF32/NotNanF64/NotNanF16/NotNanF128 (module finite ->not_nan, shorthand constructors ff64/... -> nnf64/...,FiniteSliceExt/FiniteRangeExt -> NotNanSliceExt/NotNanRangeExt). The+infinity-infinity are legal values and MIN/MAX are the two infinitiesf64::MIN/f64::MAX); MAX_SIZE grew by 2 to account for them.Added experimental floating-point range support through the float_experimental feature for f32/f64, and the float_nightly_experimental feature for f16
float_experimental feature
for f32/f64, and the float_nightly_experimental feature for f16/f128.
Finite supports finite values with zero canonicalized to +0.0, while Total supports
all floating-point values in total order, including NaNs, infinities, and signed zero.
Both provide constructors, range operations, and after/before navigation APIs.Fix wasm-pack test command syntax for improved compatibility
Fix wasm-pack test command syntax for improved compatibility
AssumeSortedStarts now verifies, in debug builds only, that the ranges it is given
actually have sorted starts, panicking with a clear message otherwise. Release builds are
unaffected (zero runtime cost). (PR #29)AssumeSortedStarts regains a leading type parameter: AssumeSortedStarts<I> ->
AssumeSortedStarts<T, I>. Most AssumeSortedStarts::new(iter) calls are unchanged due to
inference; explicit type aliases/annotations may need updating.Update rand package versions to 0.8.6 and 0.9.4 in Cargo.lock
Update rand package versions to 0.8.6 and 0.9.4 in Cargo.lock
SortedStarts/SortedDisjoint (and the *Map equivalents) for applicable
core::iter/std::iter adapter types whose iterators cannot break the sorted-disjoint
invariants, so these standard iterators can be used directly with the library's operators
(PR #27).Option<SortedDisjoint> into a SortedDisjoint via
FlatMap/Flatten.core::iter::StepBy is not yet supported because it does not implement FusedIterator
upstream; see the TODO in src/sorted_disjoint.rs and
https://internals.rust-lang.org/t/implement-fusediterator-for-core-stepby/24074Removed redundant struct-level trait bounds across iterator/map/set wrapper structs and kept constraints on impls/usage sites where needed.
AssumeSortedStarts and AssumePrioritySortedStartsMap now take fewer generic parameters.
AssumeSortedStarts<T, I> -> AssumeSortedStarts<I>AssumePrioritySortedStartsMap<T, VR, I> -> AssumePrioritySortedStartsMap<I>AssumeSortedStarts::new(iter) andAssumePrioritySortedStartsMap::new(iter) are typically unchanged due to inference; explicitParallelize check-all, skip benches locally, and fix SIMD/example reg…
Parallelize check-all, skip benches locally, and fix SIMD/example reg…
RangeSetBlaze::ranges_insert and RangeMapBlaze::ranges_insert now accept any RangeBounds<T>, not just RangeInclusive<T> (issue #24).Update lockfile for 0.4.3
Update lockfile for 0.4.3
cargo check-all now runs independent checks in parallelcheck-all test target now uses --lib --tests --examples to skip slow benchesfrom_slice SIMD imports/bounds for compatibility with current Rust nightly APIs.examples/nine_rules_maps assertions to match right-to-left precedence semantics.Fix SIMD compatibility for nightly: remove LaneCount/SupportedLaneCount
from_slice feature for compatibility with Rust nightly (post-2026-01-28)
LaneCount and SupportedLaneCount trait bounds from SIMD codefrom_slice featureImplemented RangeOnce , a zero-allocation adapter that yields 0 or 1 non-empty inclusive ranges.
Implemented RangeOnce<T>, a zero-allocation adapter that yields 0 or 1
non-empty inclusive ranges.
RangeOnce implements SortedStarts<T> and SortedDisjoint<T>,
providing a sound and ergonomic way to work with single ranges.
Example:
&a & RangeOnce::new(15, 35);
&a | RangeOnce::new(22, 25);
Empty ranges (start > end) now produce an empty iterator,
preserving all invariants.
Added From<RangeInclusive<T>> for RangeSetBlaze, allowing direct
conversion of single ranges:
RangeSetBlaze::from(5..=10);
RangeSetBlaze::from(5..=4); // yields empty set
Changed precedence of RangeMapBlaze to always be right-to-left.
RangeMapBlaze to always be right-to-left.Some breaking changes in the rest of the package to improve the API and performance.
RangeMapBlaze.char, IpAddV4, and IpAddV6 integer-like types.Nothing published for this version
Nothing published for this version
Added RangeSetBlaze::from_sorted_starts
RangeSetBlaze::from_sorted_startsSortedStarts and AssumeSortedStartsCheckSortedDisjoint::new to support IntoIteratorAssumeSortedStarts::new to support IntoIteratorNothing published for this version
Added DoubleEndedIterator when iterating integer elements. Thanks to enh.
Added optional from_slice cargo feature and support for a new RangeSetBlaze::from_slice constructor. The feature uses SIMD and requires Rust nightly.
from_slice cargo feature and support
for a new RangeSetBlaze::from_slice constructor.
The feature uses SIMD and requires Rust nightly.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →