11个不稳定版本 (3个破坏性更新)
0.6.0-alpha.2 | 2024年8月7日 |
---|---|
0.6.0-alpha.0 | 2024年8月1日 |
0.5.6 | 2024年7月18日 |
0.5.1 | 2024年4月5日 |
0.1.0 | 2023年12月6日 |
#132 in 内存管理
12,989 每月下载量
在 69 个crate中(10个直接使用)
41KB
904 行
生成器盒子
生成器盒子是Rust的一个运行时,允许任何静态类型实现Copy
。它可以与全局运行时结合,创建类似于dioxus-signals
的直观状态解决方案。此crate没有包含任何&'static
代码。
三种主要类型在生成器盒子中管理状态
Store
:处理回收已丢弃的生成器盒子。您的应用程序应有一个存储或每个线程一个存储。Owner
:处理丢弃生成器盒子。所有者行为像一个运行时生命周期保护器。您使用所有者创建的任何状态都将在该所有者丢弃时被丢弃。GenerationalBox
:核心Copy状态类型。当所有者被丢弃时,生成器盒子将被丢弃。
示例
use generational_box::{UnsyncStorage, AnyStorage};
// Create an owner for some state for a scope
let owner = UnsyncStorage::owner();
// Create some non-copy data, move it into a owner, and work with copy data
let data: String = "hello world".to_string();
let key = owner.insert(data);
// The generational box can be read from and written to like a RefCell
let value = key.read();
assert_eq!(*value, "hello world");
工作原理
内部,generational-box
创建一个生成器RefCell
竞技场,当所有者被丢弃时进行回收。您可以将这些单元格视为类似于&'static
指针的&'static
,其中包含一个生成器检查,以使回收单元格更容易调试。然后,由于Copy
,因此GenerationalBox
是Copy
。
依赖关系
~0.4–5.5MB
~11K SLoC