1 个不稳定版本
0.1.0-pre.1 | 2023 年 10 月 23 日 |
---|
#703 in Cargo 插件
用于 hax 子命令
1MB
6.5K SLoC
Hax
Hax 是一个用于高保证翻译的工具,可以将 Rust 的大多数子集翻译成形式语言,如 F* 或 Coq。这扩展了 hacspec 项目的范围,该项目之前是一个嵌入 Rust 的领域特定语言,成为一个可用于验证 Rust 程序的可用工具。
那么现在的 hacspec 是什么呢?
hacspec 是可以与 hacspec 标准库一起使用,以编写简洁、可执行和可验证的 Rust 规范的功能子集。这些规范可以用 hax 翻译成形式语言。
用法
Hax 是一个 cargo 子命令。命令 cargo hax
接受以下子命令
into
(cargo hax into BACKEND
):将 Rust 包翻译成后端BACKEND
(例如fstar
,coq
)。json
(cargo hax json
): 将你的crate的强类型AST提取为JSON文件。
注意
BACKEND
可以是fstar
、coq
或easycrypt
。支持的backend列表可以通过运行cargo hax into --help
来显示。- 子命令
cargo hax
接受选项,使用cargo hax --help
列出它们。 - 子命令
cargo hax into
也接受选项,使用cargo hax into --help
列出它们。
安装
Nix
应在Linux、MacOS和Windows上工作。Linux、MacOS和Windows。
先决条件: Nix包管理器 (已启用flakes)
- 可以使用Determinate Nix Installer,以下为bash单行命令
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
- 或者按照这些步骤进行。
-
在crate上运行hax以获取F*/Coq/...
cdpath/to/your/crate
nix 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 [email protected]: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
)rustup
nodejs
jq
- 克隆此仓库:
git clone [email protected]:hacspec/hacspec-v2.git && cd hacspec-v2
- 运行 setup.sh 脚本:
./setup.sh
。 - 运行
cargo-hax --help
示例
有一组示例展示了 hax 可以为您做什么。请查看 示例目录
Hax 编程
编辑源代码(Nix)
只需将代码克隆到仓库中,然后运行 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 的辅助文献
贡献
依赖关系
~3–13MB
~121K SLoC