1 个不稳定版本
| 0.1.0-pre.1 | 2023年10月23日 |
|---|
#583 在 Cargo 插件
175KB
1.5K SLoC
Hax
hax 是一个用于高保证翻译的工具,可以将 Rust 的大多数子集翻译成形式语言,如 F* 或 Coq。这扩展了 hacspec 项目的范围,hacspec 之前是一个嵌入 Rust 的 DSL,现在是一个可用于验证 Rust 程序的工具。
那么现在的 hacspec 是什么呢?
hacspec 是 Rust 的函数子集,可以与 hacspec 标准库一起使用,以简洁、可执行和可验证的方式在 Rust 中编写规范。这些规范可以用 hax 翻译成形式语言。
使用方法
Hax 是一个 cargo 子命令。命令 cargo hax 接受以下子命令
into(cargo hax into BACKEND):将 Rust 包翻译成后端BACKEND(例如fstar,coq)。json(cargo hax json):将你的包的带类型抽象语法树(AST)提取为 JSON 文件。
注意
BACKEND可以是fstar、coq或easycrypt。支持的 backend 列表可以通过运行cargo hax --help来显示。- 子命令
cargo hax接受选项,使用cargo hax --help来列出它们。 - 子命令
cargo hax into也接受选项,使用cargo hax into --help来列出它们。
安装
Nix
此方法应在 Linux、MacOS 和 Windows 上工作。
先决条件: Nix 包管理器 (已启用 Flakes)
- 可以使用以下 bash 一行命令,通过 Determinate Nix 安装程序:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install - 或者遵循 这些步骤。
-
在 crate 上运行 hax 来获取 F*/Coq/...
cdpath/to/your/cratenix run github:hacspec/hacspec-v2--into fstar
将在目录hax/extraction/fstar中创建fst模块。
注意:将fstar替换为您的首选 backend
-
安装工具:
nix profile install github:hacspec/hacspec-v2- 然后在任何地方运行
cargo hax --help
- 然后在任何地方运行
使用 Docker
- 克隆此仓库:
git clone git@github.com:hacspec/hacspec-v2.git && cd hacspec-v2 - 构建 Docker 镜像:
docker build -f .docker/Dockerfile . -t hacspec-v2 - 获取 shell:
docker run -it --rm -v /some/dir/with/a/crate:/work hacspec-v2 bash - 现在可以运行
cargo-hax --help(注意这里我们使用cargo-hax而不是cargo hax)
手动安装
- 请确保在您的系统上安装了以下内容
opam(opam switch create 4.14.1)rustupnodejsjq
- 克隆此仓库:
git clone git@github.com:hacspec/hacspec-v2.git && cd hacspec-v2 - 运行 setup.sh 脚本:
./setup.sh。 - 运行
cargo-hax --help
示例
有一组示例展示了 hax 可以为您做什么。请查看 示例目录
在 Hax 上进行黑客攻击
编辑源代码(Nix)
只需克隆并 cd 到仓库中,然后运行 nix develop .。您还可以使用 direnv,配合 编辑器集成。
此存储库的结构
rust-frontend/:Rust 库,它通过挂钩 rust 编译器并提取其内部类型化抽象语法树 THIR 作为 JSON。engine/:简化并精化引擎,将程序从 Rust 语言转换为各种后端(请参阅engine/backends/)。cli/:Cargo 的hax子命令。
重新编译
您可以使用 .utils/rebuild.sh 脚本(在 Nix 开发外壳中使用时,作为 rebuild 命令自动提供)
rebuild:重新构建 Rust 然后是 OCaml 部分;rebuild TARGET:重新构建TARGET部分(《TARGET》是rust或ocaml)。
出版物和其他材料
使用 hacspec 的次级文献
贡献
依赖关系
~4–14MB
~175K SLoC