5个不稳定版本
0.3.1 | 2022年5月2日 |
---|---|
0.3.0 | 2021年8月29日 |
0.2.0 | 2021年8月1日 |
0.1.1 | 2021年7月18日 |
0.1.0 | 2021年7月18日 |
#1259 in Rust模式
16KB
207 行
此库提供了一个安全、零开销的接口,通过访问另一个单例令牌来保护对共享数据的访问。它是GhostCell的扩展,允许使用除品牌令牌之外更通用的单例,使数据能够 'static
此库还提供了两种单例实现
- 通过
with_token
使用GhostCell的scoped、品牌令牌 - 通过
new_singleton
简单地创建一次单例结构体
为什么选择SCell而不是
GhostCell(以及来自qcell crate的LCell)
- 使用具体的单例类型,SCell可以是
'static
并因此存储在'static
数据结构中。 - SCell的使用不必严格受限。
- SCell更为灵活,并提供了一个
with_token
方法来模拟GhostCell。 - 可以使用SCell使用擦除的零大小引用,从而实现真正的零成本抽象。
来自qcell crate的其他Cells
- 创建SCell不需要任何对拥有类型的引用。
- SCells提供
from_mut
和类似接口:它们类似于Cell和GhostCell的结构。 - SCells没有运行时成本。
为什么不呢?
- 与GhostCell不同,SCell更通用的用法尚未经过形式化证明。
- 涉及SCell的类型签名可能比其他选项略为冗长。
示例
请参阅示例目录以获取一些代码示例
new_singleton(pub Lock);
pub fn main() {
let mut lock1 = Lock::new().expect("Called main twice");
let cell1 = SCell::new(0);
let cell2 = &cell1;
cell1.borrow_mut(&mut lock1) += 1;
assert_eq!(1, *cell2.borrow(&lock1));
}
依赖关系
~20KB