#hash #hasher #rustc #fxhash

无 std rustc-hash

由 rustc 使用的快速非加密哈希算法

4 个稳定版本

2.0.0 2024 年 6 月 18 日
1.2.0 2024 年 5 月 28 日
1.1.0 2020 年 2 月 8 日
1.0.1 2018 年 5 月 28 日
1.0.0 2018 年 5 月 24 日

算法 中排名第 5

Download history 1093785/week @ 2024-05-03 1099427/week @ 2024-05-10 1115218/week @ 2024-05-17 1076008/week @ 2024-05-24 1239816/week @ 2024-05-31 1222182/week @ 2024-06-07 1226616/week @ 2024-06-14 1330413/week @ 2024-06-21 1262438/week @ 2024-06-28 1289918/week @ 2024-07-05 1377834/week @ 2024-07-12 1400088/week @ 2024-07-19 1448915/week @ 2024-07-26 1527592/week @ 2024-08-02 1593957/week @ 2024-08-09 1625353/week @ 2024-08-16

每月下载量 6,467,831
12,062 个crate (直接使用 758 个) 中使用

Apache-2.0/MIT

25KB
372

rustc-hash

crates.io Documentation

由 rustc 使用的快速非加密哈希算法。在 std 中的哈希表默认使用 SipHash,这可以提供防止 DOS 攻击的能力。这些攻击在编译器中不是问题,所以我们更愿意使用更快、非加密的哈希算法。

这个包最初提供的哈希算法是从 Firefox 中取出的,因此它提供的哈希器被称为 FxHasher。为了保持向后兼容性,保留了此名称,但底层的哈希算法已经更换。哈希器的当前设计是一个多项式哈希,后跟单个位旋转,以及受 wyhash 启发的字符串/切片压缩函数,这两个都是由 Orson Peters 设计的。

对于 rustc,我们已经尝试了多种不同的哈希算法。哈希速度至关重要,尤其是对于单个整数。在更高质量的哈希上花费更多的 CPU 周期并不能减少足够的哈希冲突,以使编译器在实际基准测试中更快。

使用方法

这个包提供了 FxHashMapFxHashSet 作为集合。它们只是使用 Fx 哈希器对应于 std::collection 的类型别名。

use rustc_hash::FxHashMap;

let mut map: FxHashMap<u32, u32> = FxHashMap::default();
map.insert(22, 44);

无 std

默认启用 std 功能以启用集合。可以在 Cargo.toml 中关闭它,如下所示

rustc-hash = { version = "2.0", default-features = false }

依赖关系

~74KB