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 在 数据结构
22KB
465 行
诅咒集合
看似破坏Rust安全性的集合。
SymbolTable
:一个内存高效地存储String
的集合,其成员可以在常数时间内进行等性比较。AppendOnlyVec
:一个序列,即使你持有对先前元素的引用,也可以向其中追加元素。LazyArray
:一个数组,其元素可以在稍后初始化,即使存在对其他已初始化元素的引用。
安全性
本crate中所有集合均使用unsafe代码实现。虽然我不能100%确信它们提供的接口是安全的,但我使用以下技术来提高我的信心。
- 使用quickcheck进行基于属性的测试。
- 使用Miri进行动态分析。
文档
lib.rs
:
看似破坏Rust安全性的集合。
当我们仍然持有对元素的引用时,不允许修改Vec
,这是借用检查器所禁止的。原因是向量可能会增长并将元素移动到新的缓冲区。我们的可怜的引用将指向无效的内存。但是,如果你知道你不需要更多元素呢?Vec
并不知道这一点,这就是诅咒集合
发挥作用的地方。这个库提供了不同的集合,它们提供了一个非常狭窄的接口,以换取在安全Rust中不寻常的操作。
本crate中的所有集合都非常邪恶,但仍然尊重Rust的安全性保证……假设它们没有错误!
依赖关系
~1MB
~15K SLoC