10 个版本 (5 个重大变更)
0.7.0 | 2022年1月29日 |
---|---|
0.6.1 | 2021年8月21日 |
0.6.0 | 2019年11月17日 |
0.5.1 | 2018年11月8日 |
0.4.1 | 2016年11月26日 |
#996 在 Rust 模式
每月44 次下载
在 gstuff 中使用
88KB
2K SLoC
Rust 的各种智能指针。
特性
强 / 弱 / 引用 / 引用可变
这类似于 Rc<RefCell<T>>
,但有一些不同的权衡
-
可配置的开销(与固定的24或12相比
Rc<RefCell<T>>
) -
默认的4字节开销可为您提供最多1024个不可变引用、1024个强引用和1024个弱引用,但这可以通过几行代码轻松调整。
-
中毒支持 - 在具有活动可变引用的panic之后,尝试获取可变或不可变引用将返回错误。可以通过调用unpoison()来撤销中毒。
还有一个线程安全的版本,类似于 Arc<RwSpinlock<T>>
。
ARef
ARef在OwningRef结束的地方继续,通过进一步抽象所有者。
这使得返回,例如,一个 ARef<str>
成为可能,并在调用者完成查看后释放所有者,而不必担心所有者是 String
、Rc<String>
、一个 Ref<String>
、一个简单的 &'static str
或其他东西。
它也是repr(C),因此可以跨越FFI边界进行传输(如果其目标是repr(C),也是如此)。
RMBA
RMBA 将一个 &T
、&mut T
、Box<T>
或 Arc<T>
包装在单个指针的大小内。
如果你尝试存储一个不是32位对齐的 struct,程序会崩溃。
Bx, Bxm
这些只是围绕 Box
的简单包装,让你摆脱 DerefMove。
这样你可以在你的 API 中返回一个 Bx,并确信内部结构在内存中不会移动。(如果你处理 FFI 或 unsafe 代码,这可能很有帮助。)
许可证
Apache 2.0 或 MIT,由你选择。