Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何决定何时将函数标记为不安全?_Rust - Fatal编程技术网

Rust 如何决定何时将函数标记为不安全?

Rust 如何决定何时将函数标记为不安全?,rust,Rust,什么时候将函数标记为不安全与仅使用不安全块比较合适?我在阅读时看到了这个函数: 不安全的fn as_u8_切片(xs:&[i32])->&[u8]{ std::slice::from_raw_parts(v.as_ptr()as*const u8, v、 len()*std::mem::size_of::()) } 我可能会将函数编写为: fn as_u8_slice(xs: &[i32]) -> &[u8] { unsafe { std::sli

什么时候将函数标记为
不安全
与仅使用
不安全
块比较合适?我在阅读时看到了这个函数:

不安全的fn as_u8_切片(xs:&[i32])->&[u8]{
std::slice::from_raw_parts(v.as_ptr()as*const u8,
v、 len()*std::mem::size_of::())
}
我可能会将函数编写为:

fn as_u8_slice(xs: &[i32]) -> &[u8] {
    unsafe {
        std::slice::from_raw_parts(v.as_ptr() as *const u8, 
                                   v.len() * std::mem::size_of::<i32>())
    }
}
fn作为u8切片(xs:&[i32])->&[u8]{
不安全{
std::slice::from_raw_parts(v.as_ptr()as*const u8,
v、 len()*std::mem::size_of::())
}
}

也就是说,我觉得调用函数在所有情况下都是安全的,但是编译器无法验证函数内部的功能。但是,我没有任何规则来说明何时使用一个或另一个函数是合适的。

将函数标记为
unsafe
if如果函数的安全取决于其参数或全局状态。如果不管参数和全局状态如何,函数都是安全的,不要将其标记为
不安全
。是否考虑使用<代码>不安全> /COD>内部安全的函数与您认为C程序是否安全相同。

< P> <代码>不安全< /COD>被设计为本地机制,当编译器无法证明安全时,绕过类型系统。如果
不安全
封装的行为是安全的,也就是说,没有办法调用会导致内存不安全的行为,那么就不需要将整个函数标记为不安全。只要公开的界面是正确的,用户无需关心函数内部是完全用安全代码实现还是用
不安全的

事实上“调用函数在所有情况下都是安全的”应该是准确的标准。
fn as_u8_slice(xs: &[i32]) -> &[u8] {
    unsafe {
        std::slice::from_raw_parts(v.as_ptr() as *const u8, 
                                   v.len() * std::mem::size_of::<i32>())
    }
}