1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年8月31日

#964 in 开发工具

Apache-2.0/MIT

1MB
20K SLoC

Rustproof

Build Status

Rustproof 是 Rust 编程语言的编译器插件。它可以从带有供应的先决条件(P)和后置条件(Q)的函数生成验证条件。也就是说,给定一个函数的后置条件,rustproof 使用 谓词转换语义 从后置条件和语句体(S)生成最弱前置条件(WP(S, Q))。然后,验证条件 P->WP(S,Q) 由 SMT 求解器(z3)进行有效性检查。这个过程的结果是函数正确性的证明。

依赖

  • rustc1.12.0-nightly(2016-08-12).

  • z3

您需要将 z3 的安装路径添加到您的 PATH 中,以便 rustproof 可以正常工作。

支持的 Rust 语言特性

  • 整数算术
    • isizeusize不支持的
  • 布尔表达式、变量和字面量
  • 断言(整数/布尔型)
    • assert_eq!()不支持的
  • if 语句

使用

将 Rustproof 包含到您的项目中

Cargo.toml 中添加 rustproof 作为依赖项

[dependencies]
rustproof = { git = "https://github.com/Rust-Proof/rustproof.git" }

使用 Rustproof

#![plugin(rustproof)] 在每个使用 rustproof 的文件中都是必需的。通常,这会被放置在文件的开始处。

Rustproof 使用自定义属性 condition 允许在函数上声明前置/后置条件。

该属性提供为: #[condition(pre=" ", post=" ")] 并且必须在函数定义之前提供。

有关属性系统的详细说明,请参阅 USAGE

请参阅 EXAMPLES 以查看具有条件属性的示例函数。

此外,#![plugin(rustproof(debug))] 会打印出每个使用 #[condition(..)] 注释的函数的基本块,以及生成验证条件的逐步视图。

贡献者

Matthew Slocum
Sami Sahli
Vincent Schuster
Michael Salter
Bradley Rasmussen
Drew Gohman
Matthew O'Brien

报告问题

请将所有问题报告到 github 问题跟踪器

许可

Rustproof 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE-APACHELICENSE-MITCOPYRIGHT

依赖

~6MB
~116K SLoC