1 个不稳定版本
0.1.0-pre.1 | 2023 年 10 月 23 日 |
---|
#311 在 Cargo 插件
在 2 crate 中使用
28KB
356 行
Hax
Hax 是一个用于高保证翻译的工具,可以将 Rust 的大量子集翻译成形式语言,如 F* 或 Coq。这扩展了 hacspec 项目的范围,该项目之前是 Rust 中的 DSL,成为一个可用于验证 Rust 程序的工具。
那么现在的 hacspec 是什么呢?
hacspec 是可以与 hacspec 标准库一起使用来编写简洁、可执行和可验证的 Rust 规范的 Rust 函数子集。这些规范可以用 hax 翻译成形式语言。
用法
Hax 是一个 cargo 子命令。命令 cargo hax
接受以下子命令
into
(cargo hax into BACKEND
):将 Rust crate 翻译成BACKEND
后端(例如fstar
,coq
)。json
(cargo hax json
):将 crate 的类型化 AST 提取为 JSON 文件。
注意
BACKEND
可以是fstar
、coq
或easycrypt
。支持的后端列表可以通过运行以下命令显示:cargo hax into --help
。- 子命令
cargo hax
接受选项,使用以下命令列出选项:cargo hax --help
。 - 子命令
cargo hax into
也接受选项,使用以下命令列出选项:cargo hax into --help
。
安装
Nix
先决条件: Nix包管理器 (已启用flakes)
- 可以使用以下bash单行命令使用Determinate Nix Installer:
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
替换为您选择的后端
-
安装工具:
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)
只需将仓库克隆并 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
贡献
依赖项
~1.8–2.8MB
~54K SLoC