#attributes #safe #unsafe

safe_attr

一个用于标记函数的 #[safe] 属性,允许省略 unsafe

1 个稳定版本

使用旧的 Rust 2015

1.0.0 2021年8月8日

#845 in 过程宏

Apache-2.0

7KB

safe_attr

safe_attr 提供了一个 #[safe] 属性来标记函数

是什么?

看看这个例子

union Num {
    float: f32,
    long: u32,
}

fn use_both() {
    let mut num = Num { long: 132 };
    let the_float = unsafe { num.float };
    // do things with the float...
    let the_long = unsafe { num.long };
    // do things with the long...

    // maybe use some more unsafes later...
}

现在,你知道这是完全安全的。这两个类型的大小相同,转换不应该需要这样的冗长。使用 safe_attr,你现在可以这样做

use safe_attr::safe;

#[safe]
fn use_both() {
    let mut num = Num { long: 132 };
    let the_float = num.float;
    let the_long = num.long;
}

此属性允许您避免在不需要 unsafe 的代码中到处使用 unsafe。

并不意味着 应该滥用此属性。它可能会使在较大的函数中追踪 unsafe 代码的错误变得更加困难,而且简单地使得找到问题点更加困难。因此,您仍然鼓励使用 // Safety: 注释来标记函数,并且仅在使用与上述示例 类似 的用例中使用此属性。

如何使用?

此属性只是将函数的主体包装在一个 unsafe 中。就是这样。

依赖项

~83KB