1个不稳定版本
0.1.0-pre.1 | 2023年10月20日 |
---|
#7 在 #adt
在 3 个crate中使用(通过 hax-frontend-exporter)
21KB
377 行
Hax
Hax 是一个用于高可靠性转换的工具,可以将 Rust 的大多数子集翻译成形式语言,如 F* 或 Coq。这扩展了 hacspec 项目的范围,hacspec 项目之前是一个嵌入在 Rust 中的 DSL,现在成为一个可用的工具,用于验证 Rust 程序。
那么现在的 hacspec 是什么呢?
hacspec 是可以与 hacspec 标准库一起使用,以编写简洁、可执行和可验证的 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
。支持的backend列表可以通过运行cargo hax into --help
来显示。- 子命令
cargo hax
接受选项,使用cargo hax --help
来列出它们。 - 子命令
cargo hax into
也接受选项,使用cargo hax into --help
来列出它们。
安装
Nix
先决条件: 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)
只需克隆并 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》是TARGET
或rust
)。
出版物及其他材料
关于使用 hacspec 的次级文献
贡献
在开始任何工作之前,请加入 Zulip 聊天,在 Github 上发起 讨论,或提交一个 问题 来讨论您的贡献。
依赖关系
~2MB
~44K SLoC