1个不稳定版本
0.1.0-pre.1 | 2023年10月20日 |
---|
在 开发工具 中排名第 798
每月下载量 26 次
用于 4 个crate
9KB
62 行
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 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
此安装程序应在 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/crate
nix run github:hacspec/hacspec-v2--into fstar
将在目录hax/extraction/fstar
中创建fst
模块。
注意:将fstar
替换为您选择的后端
-
安装工具:
nix profile install github:hacspec/hacspec-
- 然后在任何位置运行
cargo hax --help
- 然后在任何位置运行
使用 Docker
- 克隆此存储库:
git clone [email protected]:hacspec/hacspec-v2.git && cd hacspec-v2
- 构建 Docker 镜像:
docker build -.docker/Dockerfile . --
- 获取外壳:
docker run -it --rm -/some/dir/with/a/crate:/work hacspec-
- 现在可以运行
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–1.6MB
~36K SLoC