#哈希 #hash #fxhash #算法 #rustc #internal

无std ccl-fxhash

这是一个从Firefox和Rustc内部使用的哈希算法衍生出的快速、非安全的哈希算法。这是一个为与ccl一起使用而设计的分支。版权归原作者所有。

3个稳定版本

使用旧的Rust 2015

3.0.0 2019年4月27日
2.0.0 2019年4月27日
1.0.0 2019年4月27日

#1204算法

每月40次下载

Apache-2.0/MIT

15KB
241

Fx哈希

这个哈希算法是从Rustc编译器中提取出来的。这是Firefox内部一些操作的相同哈希算法。这个算法的优势在于在64位平台上一次处理8字节,而FNV算法一次处理一个字节。

免责声明

这不是一个加密安全的哈希,因此强烈建议您不要使用此哈希进行加密目的。此外,此哈希算法未设计为防止任何用于确定碰撞的攻击,这可能导致在HashMap中产生二次行为。因此,不建议在可能存在碰撞或DDoS攻击的地方公开此哈希。

示例

构建基于Fx的hashmap。

extern crate fxhash;
use fxhash::FxHashMap;

let mut hashmap = FxHashMap::default();

hashmap.insert("black", 0);
hashmap.insert("white", 255);

构建基于Fx的hashset。

extern crate fxhash;
use fxhash::FxHashSet;

let mut hashmap = FxHashSet::default();

hashmap.insert("black");
hashmap.insert("white");

基准测试

一般来说,在fxhashu32u64或长度大于等于5的任何字节序列上比fnv更快。然而,请注意,哈希速度并不是唯一值得考虑的特性。话虽如此,当从基于fnv的hashmap切换到基于fx的hashmap时,Rustc的速度有明显的提高。

bench_fnv_003     ... bench:      3 ns/iter (+/- 0)
bench_fnv_004     ... bench:      2 ns/iter (+/- 0)
bench_fnv_011     ... bench:      6 ns/iter (+/- 1)
bench_fnv_012     ... bench:      5 ns/iter (+/- 1)
bench_fnv_023     ... bench:     14 ns/iter (+/- 3)
bench_fnv_024     ... bench:     14 ns/iter (+/- 4)
bench_fnv_068     ... bench:     57 ns/iter (+/- 11)
bench_fnv_132     ... bench:    145 ns/iter (+/- 30)
bench_fx_003      ... bench:      4 ns/iter (+/- 0)
bench_fx_004      ... bench:      3 ns/iter (+/- 1)
bench_fx_011      ... bench:      5 ns/iter (+/- 2)
bench_fx_012      ... bench:      4 ns/iter (+/- 1)
bench_fx_023      ... bench:      7 ns/iter (+/- 3)
bench_fx_024      ... bench:      4 ns/iter (+/- 1)
bench_fx_068      ... bench:     10 ns/iter (+/- 3)
bench_fx_132      ... bench:     19 ns/iter (+/- 5)
bench_seahash_003 ... bench:     30 ns/iter (+/- 12)
bench_seahash_004 ... bench:     32 ns/iter (+/- 22)
bench_seahash_011 ... bench:     30 ns/iter (+/- 4)
bench_seahash_012 ... bench:     31 ns/iter (+/- 1)
bench_seahash_023 ... bench:     32 ns/iter (+/- 6)
bench_seahash_024 ... bench:     31 ns/iter (+/- 5)
bench_seahash_068 ... bench:     40 ns/iter (+/- 9)
bench_seahash_132 ... bench:     50 ns/iter (+/- 12)

依赖关系

~175KB