1个不稳定版本

0.1.0-pre.12023年10月20日

开发工具 中排名第 798

每月下载量 26
用于 4 个crate

Apache-2.0 协议

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(例如 fstarcoq)。
  • json (cargo hax json):将 crate 的类型化 AST 作为 JSON 文件提取。

注意

  • BACKEND 可以是 fstarcoqeasycrypt。支持的后端列表可以通过运行 cargo hax into --help 显示。
  • 子命令 cargo hax 可以接受选项,使用以下命令列出它们:cargo hax --help.
  • 子命令 cargo hax into 同样可以接受选项,使用以下命令列出它们:cargo hax into --help.

安装

Nix

此安装程序应在 LinuxMacOSWindows 上运行。

先决条件: 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
  1. 克隆此存储库: git clone [email protected]:hacspec/hacspec-v2.git && cd hacspec-v2
  2. 构建 Docker 镜像: docker build -.docker/Dockerfile . --
  3. 获取外壳: docker run -it --rm -/some/dir/with/a/crate:/work hacspec-
  4. 现在可以运行 cargo-hax --help(注意这里我们使用 cargo-hax 而不是 cargo hax
手动安装
  1. 请确保您的系统上已安装以下内容
  • opam (opam switch create 4.14.1)
  • rustup
  • nodejs
  • jq
  1. 克隆此存储库: git clone [email protected]:hacspec/hacspec-v2.git && cd hacspec-v2
  2. 运行 setup.sh 脚本: ./setup.sh
  3. 运行 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部分(TARGETrustocaml)。

出版物及其他资料

二次文献,使用hacspec

贡献

在开始任何工作之前,请加入Zulip聊天,在GitHub上开始讨论,或提交一个问题来讨论您的贡献。

依赖关系

~0.8–1.6MB
~36K SLoC