12个版本 (6个破坏性更新)

0.8.3 2022年8月20日
0.8.0 2022年7月25日
0.6.2 2020年8月3日
0.6.1 2020年7月27日
0.6.0 2019年2月11日

#1430数据结构

GPL-3.0+

22KB
465

诅咒集合

看似破坏Rust安全性的集合。

  • SymbolTable:一个内存高效地存储String的集合,其成员可以在常数时间内进行等性比较。
  • AppendOnlyVec:一个序列,即使你持有对先前元素的引用,也可以向其中追加元素。
  • LazyArray:一个数组,其元素可以在稍后初始化,即使存在对其他已初始化元素的引用。

安全性

本crate中所有集合均使用unsafe代码实现。虽然我不能100%确信它们提供的接口是安全的,但我使用以下技术来提高我的信心。

  • 使用quickcheck进行基于属性的测试。
  • 使用Miri进行动态分析。

文档

https://docs.rs/cursed-collections/


lib.rs:

看似破坏Rust安全性的集合。

当我们仍然持有对元素的引用时,不允许修改Vec,这是借用检查器所禁止的。原因是向量可能会增长并将元素移动到新的缓冲区。我们的可怜的引用将指向无效的内存。但是,如果你知道你不需要更多元素呢?Vec并不知道这一点,这就是诅咒集合发挥作用的地方。这个库提供了不同的集合,它们提供了一个非常狭窄的接口,以换取在安全Rust中不寻常的操作。

本crate中的所有集合都非常邪恶,但仍然尊重Rust的安全性保证……假设它们没有错误!

依赖关系

~1MB
~15K SLoC