1 个不稳定版本
0.1.0-pre.1 | 2023年10月23日 |
---|
#408 在 Cargo 插件
在 2 crates 中使用
19KB
332 行
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 包翻译成后端BACKEND
(例如fstar
,coq
)。json
(cargo hax json
): 将您的包的已类型化抽象语法树(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 上工作。
先决条件: 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 devshell 时自动可用作为命令 rebuild
)
rebuild
:重新构建 Rust,然后是 OCaml 部分;rebuild TARGET
:重新构建TARGET
部分(TARGET
是rust
或ocaml
)。
出版物及其他材料
次要文献,使用 hacspec
贡献
在开始任何工作之前,请加入 Zulip 聊天,在 GitHub 上发起讨论,或提交一个 问题 来讨论您的贡献。
依赖项
~0.8–11MB
~87K SLoC