0.1.0 |
|
---|
#9 in #uninitialized
16KB
149 行
no_std
兼容。
该crate的目标是允许使用安全的未初始化值。许多类似的功能已经包含在Rust core
库中,例如 MaybeUninit
和标准类型中的函数。例如,目前(稳定版Rust 1.41)作为编译器的夜间功能,可以看到 Box::new_uninit()
,它允许使用 MaybeUninit
值分配内存。基本上,这个新的crate允许创建不是“可能”而是“肯定”未初始化的值,尽管它们未初始化,但它们是安全的。正因为如此,它们被直接表示为一个值,而不需要任何像 MaybeUninit
这样的包装器,也不需要不安全代码块。
主要特质是 SafeUninit
,它表示可以在不初始化且不使用额外包装器的情况下安全使用的类型。它为所有原始整数类型及其原子变体实现了,对于 SafeUninit
的固定大小数组(最多32个值),对于最多12个元素的 SafeUninit
元组对象,以及单元类型 ()
。
此crate是 no-std
,但在适当的情况下也实现了 alloc
类型的特质。
代码示例
let mut big_arr = [usize::safe_uninit(); 256];
for i in big_arr.iter() {
println!("{}", i);
}
let mut small_arr: [u32; 32] = safe_uninit();
let rc: Rc<usize> = Rc::uninit_content();
let b: Box<i32> = Box::uninit_content();
let mut vec: Vec<usize> = Vec::with_capacity(100);
vec.resize_uninit(100); // Now Vec is filled with uninitialized content.
// Shorter variant:
let mut vec: Vec<usize> = Vec::with_uninit_len(100);
依赖项
~1.5MB
~36K SLoC