All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.1.0 - 2024-12-09
- The XXH3 128-bit algorithm is implemented via
XxHash3_128
and thexxhash3_128
module.
2.0.1 - 2024-11-04
- Removed a panic that could occur when using
XxHash3_64
to hash 1 to 3 bytes of data in debug mode. Release mode and different lengths of data are unaffected.
2.0.0 - 2024-10-18
This release is a complete rewrite of the crate, including reorganization of the code. The XXH3 algorithm now matches the 0.8 release of the reference C xxHash implementation.
-
XxHash32::oneshot
andXxHash64::oneshot
can perform hashing with zero allocation and generally improved performance. If you have code that creates a hasher and hashes a slice of bytes exactly once, you are strongly encouraged to use the new functions. This might look like:// Before let mut hasher = XxHash64::new(); // or XxHash32, or with seeds some_bytes.hash(&mut hasher); let hash = hasher.finish(); // After let hash = XxHash64::oneshot(some_bytes);
-
There is a feature flag for each hashing implementation. It is recommended that you opt-out of the crate's default features and only select the implementations you need to improve compile speed.
-
The crates minimum supported Rust version (MSRV) is now 1.81.
-
Functional and performance comparisons are made against the reference C xxHash library version 0.8.2, which includes a stable XXH3 algorithm.
-
Support for randomly-generated hasher instances is now behind the
random
feature flag. It was previously combined with thestd
feature flag.
-
The deprecated type aliases
XxHash
andRandomXxHashBuilder
have been removed. Replace them withXxHash64
andxxhash64::RandomState
respectively. -
RandomXxHashBuilder32
andRandomXxHashBuilder64
are no longer available at the top-level of the crate. Replace them withxxhash32::RandomState
and ``xxhash64::RandomState` respectively. -
Xxh3Hash64
andxx3::Hash64
have been renamed toXxHash3_64
andxxhash3_64::Hasher
respectively. -
The free functions
xxh3::hash64
,xxh3::hash64_with_seed
, andxxh3::hash64_with_secret
are now associated functions ofxxhash3_64::Hasher
:oneshot
,oneshot_with_seed
andoneshot_with_secret
. Note that the argument order has changed. -
Support for the digest crate has been removed. The digest crate is for cryptographic hash functions and xxHash is non-cryptographic.
-
XxHash32
andXxHash64
no longer implementCopy
. This prevents accidentally mutating a duplicate instance of the state instead of the original state.Clone
is still implemented so you can make deliberate duplicates. -
The XXH3 128-bit variant is not yet re-written. Work is in progress for this.
-
We no longer provide support for randomly-generated instances of the XXH3 64-bit variant. The XXH3 algorithm takes both a seed and a secret as input and deciding what to randomize is non-trivial and can have negative impacts on performance.