2个版本
0.1.2 | 2020年1月21日 |
---|---|
0.1.1 | 2018年7月28日 |
#1157 在 数据结构
每月398次下载
15KB
239 行
Rust中的Hash Cons'ing
有时,一个Rc<T>
对于高效、紧凑的不可变结构是不够的。
相比之下
-
Merkle<T>
在存在共享的情况下提供了紧凑序列化。 -
Hc<T>
在存在共享的情况下提供了唯一表示。
状态
Merkle<_>
类型已实现并经过测试。Hc<_>
类型是微小的变化;它仍然是未来的工作。
背景
有时,我们想要一个类型T
的共享实例,它只序列化一次,而不是像Rc
类型那样每次引用都序列化。
与“裸”的Rc<T>
不同,一个Merkle<T>
具有一个实用的属性:当一个包含多个(共享)Merkle<T>
实例的结构被序列化时,这个序列化输出只包含每个T
序列化表示的一个实例;其他实例仅由T
的唯一标识符(在现代机器上为单字节的Id序列化)组成。
实现摘要
Merkle<T>
有一个唯一的ID(作为哈希计算得出)允许通过序列化和序列化逻辑使用的临时存储进行基于表的间接引用。
相比之下,裸露的 Rc<T>
缺少这种间接引用,因此,它缺少对大量共享结构的紧凑序列化表示。通常,通过许多共享的 Rc<_>
导致序列化空间和时间上的 指数级膨胀。
依赖项
~0.6–1.4MB
~31K SLoC