A speedy, non-cryptographic hashing algorithm used by rustc
and Firefox.
The hash map in std
uses SipHash by default, which provides resistance against DOS attacks.
These attacks aren't as much of a concern in the compiler so we prefer to use the quicker, non-cryptographic Fx algorithm.
The Fx algorithm is a unique one used by Firefox. It is fast because it can hash eight bytes at a time.
Within rustc
, it consistently outperforms every other tested algorithm (such as FNV).
The collision rate is similar or slightly worse than other low-quality hash functions.
This crate provides FxHashMap
and FxHashSet
as collections.
They are simply type aliases for their std::collection
counterparts using the Fx hasher.
use rustc_hash::FxHashMap;
let mut map: FxHashMap<u32, u32> = FxHashMap::default();
map.insert(22, 44);
The std
feature is on by default to enable collections.
It can be turned off in Cargo.toml
like so:
rustc-hash = { version = "1.1", default-features = false }