1 个不稳定版本
0.3.0 | 2024年1月2日 |
---|---|
0.2.1 |
|
0.2.0 |
|
0.1.1 |
|
0.1.0 |
|
#689 在 内存管理 中
每月下载量 36 次
10KB
129 代码行
toast-cell
一种编译时检查别名类型的类型品牌单元。
感谢 GhostCell 项目为这种模式奠定了基础,以及感谢 matthieu-m 创建了 ghost-cell
crate。
lib.rs
:
toast_cell
一种编译时检查别名类型的类型品牌单元。
它基于 GhostCell 的先前工作,但用类型品牌交换了生命周期品牌。
安全性
与 GhostCell 不同,这个crate尚未经过正式证明。使用风险自负。
用法
此 crate 的接口与 GhostCell 的接口非常相似。主要区别在于 Token
需要从 type-factory
获取类型品牌,而不是生成的生命周期品牌。
use toast_cell::{type_factory, Cell, Token};
// 1. Create a brand type.
type_factory::with(|brand| {
// 2. Make a unique `Token` out of it.
// The brand is consumed, so it cannot be used by any other token.
let mut token = Token::new(brand);
// 3. Use it with some `Cell`s.
let cell = Cell::new(0);
let references = [&cell, &cell, &cell];
for cell in references {
*cell.borrow_mut(&mut token) += 1;
}
assert_eq!(cell.into_inner(), 3);
});
由于生成的品牌类型不能复制并且会被消耗,每个 Token
都保证与任何其他 Token
独一无二。
品牌类型还保证使用一个 token 的 Cell
与其他 token 不兼容。
type_factory::with(|initial| {
let (brand, other_brand) = type_factory::split(initial);
let mut token = Token::new(brand);
let cell = Cell::new(41);
*cell.borrow_mut(&mut token) += 1; // ✅
let mut other_token = Token::new(other_brand);
*cell.borrow_mut(&mut other_token) -= 1; // ❌
});
它是如何工作的?
此 crate 的文档目前相当稀疏。我建议查看 ghost-cell
的文档以获取有关 GhostCell 实际属性更多信息。
最低支持的 Rust 版本
MSRV 目前为 1.61。
这可能在次要版本之间发生变化。
许可证
我使用 Unlicense 将此 crate 释放到公共领域。
依赖项
~7KB