18 个版本
使用旧的 Rust 2015
0.8.1 | 2023 年 6 月 25 日 |
---|---|
0.7.2 | 2022 年 7 月 20 日 |
0.7.1 | 2022 年 2 月 26 日 |
0.6.1 | 2021 年 3 月 3 日 |
0.0.1 | 2015 年 6 月 2 日 |
在 Rust 模式 中排名 #257
每月下载量 737
用于 8 个 crate(通过 stylish-core)
70KB
1.5K SLoC
stack_dst
行内(即堆栈分配)的动态大小类型,以及使用相同逻辑的动态大小类型的集合
概述
该软件包提供直接在分配中存储 DST 的方法。
基本用法
该软件包涵盖两个主要用例
Value
允许在固定大小分配中存储(和返回)单个 DSTStack
和Fifo
允许异构集合,无需为每个对象装箱。
示例
无装箱闭包
最明显的用途之一是允许返回捕获的闭包,而无需装箱。在下面的示例中,闭包拥有 value
的所有权,然后使用 Value
返回
use stack_dst::Value;
// The closure is stored in two 64-bit integers (one for the vtable, the other for the value)
fn make_closure(value: u64) -> Value<dyn Fn()->String, ::stack_dst::buffers::U64_2> {
if value < 0x10000 {
ValueA::new_stable(move || format!("Hello there! value={}", value), |v| v as _).ok().expect("Closure doesn't fit")
}
else {
ValueA::new_stable(move || format!("Hello there! value={:#x}", value), |v| v as _).ok().expect("Closure doesn't fit")
}
}
let closure = make_closure(12);
assert_eq!( closure(), "Hello there! value=12" );
状态
- 适用于大多数测试用例
- miri 对其感到满意
- 没有在各个平台上进行严格测试
最低 rust 版本
- 使用
MaybeUninit
,因此需要至少 1.36
许可证
许可证为以下之一
- Apache 许可证,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确说明,否则任何有意提交以包含在你的作品中并由 Apache-2.0 许可证定义的贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖项
~235KB