#unsafe #soundness #attributes #why #ok #ensure #explaining

safe

用于解释为什么 unsafe 代码是安全的 #[safe] 属性。

2 个不稳定版本

0.1.0 2019年6月17日
0.0.1 2019年1月19日

1056开发工具

每月下载量 21

MIT/Apache

9KB
59

rust-safe

Build Status Crates.io Docs.rs

用于解释为什么 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();
}

您还可以使用 requiresensures 参数提供先验条件和后验条件。

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 许可证定义,均应作为上述双许可发布,不附加任何额外条款或条件。

依赖关系

约 2.2-3.5MB
~68K SLoC