12个版本
0.6.1 | 2023年6月25日 |
---|---|
0.6.0 | 2022年10月18日 |
0.5.1 | 2022年7月4日 |
0.5.0 | 2021年10月7日 |
0.4.0 | 2020年11月17日 |
#40 在 内存管理
6,660 每月下载量
用于 118 个crates (直接使用18个)
57KB
1K SLoC
Thunderdome
Thunderdome是一个受generational-arena、slotmap 和 slab 启发的代际竞技场。它通过从Arena
返回的小(8字节)键提供恒定时间的插入、查找和删除。
Thunderdome的关键类型,Index
,当放入Rust的NonZero*
类型中时,仍然是8字节,这是由于Rust的NonZero*
类型。
基本示例
let mut arena = Arena::new();
let foo = arena.insert("Foo");
let bar = arena.insert("Bar");
assert_eq!(arena[foo], "Foo");
assert_eq!(arena[bar], "Bar");
arena[bar] = "Replaced";
assert_eq!(arena[bar], "Replaced");
let foo_value = arena.remove(foo);
assert_eq!(foo_value, Some("Foo"));
// The slot previously used by foo will be reused for baz
let baz = arena.insert("Baz");
assert_eq!(arena[baz], "Baz");
// foo is no longer a valid key
assert_eq!(arena.get(foo), None);
与类似Crates的比较
功能 | Thunderdome | generational-arena | slotmap | slab |
---|---|---|---|---|
代际索引¹ | 是 | 是 | 是 | 否 |
size_of::<索引>() |
8 | 16 | 8 | 8 |
size_of::<Option<索引>>() |
8 | 24 | 8 | 16 |
最大元素数 | 2³² | 2⁶⁴ | 2³² | 2⁶⁴ |
非Copy 值 |
是 | 是 | 是 | 是 |
no_std 支持 |
是 | 是 | 是 | 否 |
Serde支持 | 否 | 是 | 是 | 否 |
- Sizes在rustc
1.44.0-x86_64-pc-windows-msvc
上计算 - 请参阅Thunderdome比较Cargo.toml,了解每个库的版本。
- 代际索引有助于解决ABA问题,这可能导致悬挂的键错误地访问新插入的数据。
最低支持的Rust版本(MSRV)
Thunderdome支持Rust 1.47.0及更高版本。在Thunderdome达到1.0之前,MSRV的变化将需要主要版本升级。在1.0之后,MSRV的变化将仅需要次要版本升级,但需要充分的理由。
Crates功能
std
(默认):使用标准库。禁用以使此crates与no-std
兼容。
许可证
许可如下
- Apache许可证,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则任何根据Apache-2.0许可证定义的、您有意提交以包含在作品中的贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。