#borrow #tls #stack-token

stack-tokens

方便 TLS 借用的栈令牌实现

1 个不稳定版本

0.1.0 2022年11月23日

#33#borrow

Apache-2.0 协议

9KB
61

Stack Tokens

Crates.io License Documentation

此库实现了栈令牌,可用于安全地借用具有栈局部生命周期的值。

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);

无运行时依赖