主要观点:
- 传统语言中值的哈希方式存在问题,如整数哈希、哈希混合、输入数据随机性处理、哈希值保证、哈希函数种子等方面。
- Rust 通过分离责任实现了更好的哈希方案,对象实现
Hash
trait,哈希器实现Hasher
trait,但Hasher
API 不适合块哈希。 - 实际中 Rust 的内置哈希器处理方式存在问题,如对不同类型数据哈希效率差异大,无法有效利用数据结构信息等。
- 目标是设计一种通用哈希,适用于大多数实际情况,对短输入快速,能抵抗 DoS 攻击但不一定是加密哈希。
关键信息和重要细节:
- Python、Java、C++中值通过调用“哈希我”方法哈希,存在多种问题,如整数哈希方式不佳、哈希混合困难、数据随机性处理浪费资源等。
- Rust 中
Hasher
和Hash
分离,对象将结构化数据转为整数流,哈希器将流转为数值哈希,理论上是好方案,但Hasher
API 不适合块哈希。 - 实际中 Rust 的
Hasher
API 对不同类型数据哈希效率差异大,如对Vec<i32>
和Vec<NewType>
哈希效率相差 5 倍,对不同哈希器也有不同影响。 - 提出设计通用哈希的目标,如采用特定的哈希方案,但 Rust 的哈希器设计限制了其实现,目前的
Hasher
和Hash
抽象存在问题,应让Hash
提供自省功能,Hasher
递归遍历哈希对象。 - 指出 Java、C++、Python 的哈希方式也有问题,如对产品类型哈希优化不足, specialization 也不能有效解决哈希问题,哈希产品类型需线性化,考虑嵌套字段等。
总结:Rust 的哈希方案在理论上较好,但实际中Hasher
API 不适合块哈希,导致对不同类型数据哈希效率差异大,目前的哈希抽象存在问题,需重新设计让Hash
和Hasher
更好协作以实现更优的哈希效果。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。