#boxed #stack #instance #derive #traits #create #default-boxed

default-boxed-derive

为default-boxed自定义衍生

9个版本

0.2.0 2022年3月13日
0.1.7 2022年3月12日
0.1.6 2020年6月3日
0.1.4 2019年9月1日
0.1.1 2019年8月31日

#10 in #boxed

Download history 255/week @ 2024-03-13 134/week @ 2024-03-20 152/week @ 2024-03-27 212/week @ 2024-04-03 153/week @ 2024-04-10 150/week @ 2024-04-17 116/week @ 2024-04-24 180/week @ 2024-05-01 71/week @ 2024-05-08 68/week @ 2024-05-15 376/week @ 2024-05-22 116/week @ 2024-05-29 87/week @ 2024-06-05 132/week @ 2024-06-12 231/week @ 2024-06-19 217/week @ 2024-06-26

685 每月下载量
6 个crate中使用 (via default-boxed)

MIT 许可证

5KB
87

default-boxed

CI Crates.io

用于直接在堆上创建具有默认值的大型结构体实例的辅助特质,而不通过栈进行。

类似于不稳定语法 box,它从语义上不需要在栈上创建整个结构体然后移动到堆上,因此与 copylessboxext 不同,它不依赖于优化来消除在栈上构建结构体,这可能在创建大型结构体时仍面临栈溢出的调试构建。

示例

use default_boxed::DefaultBoxed;

const BASE: usize = 1024;

#[derive(DefaultBoxed)]
struct Foo {
    a: Bar,
    b: [Bar; 1024 * BASE],
    c: [u32; 1024 * BASE],
}

struct Bar(u16);
impl Default for Bar {
    fn default() -> Bar {
        Bar(29)
    }
}

let foo = Foo::default_boxed();
assert_eq!(foo.a.0, 29);
assert_eq!(foo.b[128 * BASE].0, 29);
assert_eq!(foo.c[256 * BASE], 0);

let foo_arr = Foo::default_boxed_array::<16>();
assert_eq!(foo_arr[15].a.0, 29);

依赖项

~1.5MB
~35K SLoC