10个版本

0.4.0 2022年9月25日
0.3.4 2022年8月27日
0.3.3 2021年8月26日
0.2.0 2021年8月21日
0.1.2 2021年8月20日

#562 in 数据结构

每月 23 次下载

BSD-3-Clause

79KB
2K SLoC

Rust中的纯函数数据结构

理由

纯函数数据结构具有持久性属性。数据结构是先前更新之上的delta更新的集合。它们是不可变的,因此非常适合用于分布式系统、并发系统和数据库等大量问题的解决方案。

包含内容

  • 列表或栈
  • 队列
  • 平衡集
  • 平衡映射
  • 哈希集
  • 哈希映射

不包括的内容

Map/Set/Queue iter 尚未实现。但是它们在 List/HashSet/HashMap/Tree 中可用。

示例

let mut numbers = Vec::new();
let mut n   = HashSet::empty();
for _ in 0..1000000 {
    let r = rand() % 100000;
    n   = n.insert(r);
    numbers.push(r);
}

let mut sorted  = numbers.clone();
sorted.sort();
sorted.dedup();

assert_eq!(n.len(), sorted.len());

for i in 0..numbers.len() {
    assert_eq!(n.exist(numbers[i]), true);
}

let mut v = n.to_vec();
v.sort();
assert_eq!(v.len(), sorted.len());
for i in sorted {
    n = n.remove(i);
    assert_eq!(n.exist(i), false);
}

assert_eq!(n.len(), 0);

测试覆盖率

测试旨在达到100%的测试覆盖率。100%的覆盖率并不排除错误。事实上,它在覆盖率工具(tarpaulin)中发现了错误,因此请自行承担风险 ;) 另外,鉴于tarpaulin的脆弱状态,有很多误报:标记为未覆盖的代码实际上是已覆盖的。

致谢

Bot set.rs & map.rs 受F#编译器代码(FSharp.Core/set.fs)中的F#代码高度启发。该F#代码是当前最高性能的实现之一。

许可证

BSD-3-Clause许可证

无运行时依赖项