2 个不稳定版本
0.1.0 | 2019年6月17日 |
---|---|
0.0.1 | 2019年1月19日 |
1056 在 开发工具
每月下载量 21
9KB
59 行
rust-safe
用于解释为什么 unsafe
代码是安全的 #[safe]
属性。
入门指南
此软件包主要用作记录你的 unsafe
代码的一种方式。最简单的用法是使用 #[safe(reason = "...")]
属性
#[safe(reason = "All zeroes is a valid bit pattern for a `u8` array")]
unsafe {
let buffer: [u8; 32] = std::mem::zeroed();
}
您还可以使用 requires
和 ensures
参数提供先验条件和后验条件。
const HELLO_WORLD: &[u8] = b"Hello, World!\0";
let mut buffer: *mut c_char = std::ptr::null_mut();
#[safe(reason = "This is a valid way to initialize a C-style string",
requires = "buffer.is_null()",
ensures = "libc::strlen(buffer) == HELLO_WORLD.len()-1")]
unsafe {
buffer = libc::malloc(42) as *mut c_char;
libc::strcpy(buffer, HELLO_WORLD.as_ptr() as *const c_char);
}
夜间 Rust
不幸的是,当此自定义属性应用于表达式时,您需要使用 nightly
。这些功能标志是
stmt_expr_attributes
proc_macro_hygiene
更多讨论请参见 #3。
许可证
本项目采用以下任一许可证
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 Apache-2.0 许可证定义,均应作为上述双许可发布,不附加任何额外条款或条件。
依赖关系
约 2.2-3.5MB
~68K SLoC