#maybe-uninit #uninit #uninitialized #optimization

已删除 safe-uninit

安全的未初始化类型以减少代码,在安全的情况下避免使用MaybeUninit

0.1.0 2020年2月22日

#9 in #uninitialized

MIT 许可证

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