1 个不稳定版本
0.1.0 | 2022年11月23日 |
---|
#33 在 #borrow
9KB
61 行
Stack Tokens
此库实现了栈令牌,可用于安全地借用具有栈局部生命周期的值。
StackToken
是零大小对象,可以使用 stack_token!
宏将其放置在调用栈上,然后可以用于从线程局部存储等位置安全地借用,并减少生命周期。
没有栈令牌,此类结构唯一的 API 是基于回调的,例如 LocalKey::with
API。然而,这个问题并不总是直接限制在线程局部存储,因为一些 API 在内部受到类似挑战的约束。
问题通常出现在代理对象想要借出一些内存,但它没有比自身更好的生命周期来约束值,但它并不直接拥有它试图借出的值。作为一名 Rust 程序员,人们会试图通过 &self 的生命周期来约束它,但由于 Box::leak
,这个生命周期可以成为 &'static。
有关更多信息,请参阅描述该概念的博客文章。
use stack_tokens::{stack_token, RefCellLocalKeyExt};
use std::cell::RefCell;
thread_local! {
static VEC: RefCell<Vec<i32>> = RefCell::default();
}
// places a token on the stack.
stack_token!(scope);
// you can now directly deref the thread local without closures
VEC.as_mut(scope).push(42);
assert_eq!(VEC.as_ref(scope).len(), 1);