#安全抽象 #内存安全 #高级 #安全 #内存 #联合 #缓存

nightly high_mem_utils

该包提供了一组内存安全的抽象,其中一些涉及转换

9 个版本

0.2.7 2020年2月6日
0.2.6 2020年1月8日
0.2.2 2019年12月31日
0.1.1 2019年12月19日

Rust 模式 中排名第 1228

每月下载量 34
用于 2 个包(通过 col_macros

无许可证

30KB
325

此包提供了一些模式中的高级内存抽象,用于确保内存和异常安全。

它为某些转换的情况和一些内存或 ptr 模块中的不安全函数提供了安全抽象,不提供自定义分配器或垃圾回收器,也不依赖于 core::alloc 不稳定的库。

此包通过启用 serde_support 功能为一些结构体提供了 serde 支持。

版本

目前此包仅为 nightly 版本,如果以下特性得到稳定: vec_leakconst_fnuntagged_unionsconst_fn_union,则将进行更改。

用法

use high_mem_utils::{Catch, DontDropOpt, DropBy};

let mut string = String::from("Hello world!");
let catch = Catch::new_str(string.clone());

assert_eq!(catch.leaked().to_string(), string); // leaked returns &&mut str,not use to_string
                                                // it's a bit difficult cast rigth now

assert_eq!(catch.seal(), string); // catch consumed
let mut a = [1, 2, 3];

{
    let elem = DropBy::new([2, 3, 4], |e: [u32; 3]| { a = e.clone(); });

    assert_eq!(*elem, Some([2, 3, 4]));
}

assert_eq!(a, [2, 3, 4]);

unsafe {
    let b = DontDropOpt::new([1, 2, 3]); // we're not dropping here because we will have two variables
                                 // pointing to the same memory and "b" lives for shorter
    a = [0; 3];
    b.as_ref().unwrap().as_ptr().copy_to(a.as_mut_ptr(), 3);
}

assert_eq!(a, [1, 2, 3]);

许可证

此代码受 Unlicense 许可证许可。

依赖项

~83–260KB