11个不稳定版本 (3个破坏性更新)

0.6.0-alpha.22024年8月7日
0.6.0-alpha.02024年8月1日
0.5.6 2024年7月18日
0.5.1 2024年4月5日
0.1.0 2023年12月6日

#132 in 内存管理

Download history 3672/week @ 2024-05-01 3411/week @ 2024-05-08 3827/week @ 2024-05-15 3575/week @ 2024-05-22 3738/week @ 2024-05-29 3590/week @ 2024-06-05 3866/week @ 2024-06-12 3859/week @ 2024-06-19 3508/week @ 2024-06-26 2289/week @ 2024-07-03 2510/week @ 2024-07-10 3526/week @ 2024-07-17 3234/week @ 2024-07-24 3426/week @ 2024-07-31 3261/week @ 2024-08-07 2364/week @ 2024-08-14

12,989 每月下载量
69 个crate中(10个直接使用)

MIT/Apache

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,因此GenerationalBoxCopy

依赖关系

~0.4–5.5MB
~11K SLoC