C2Rust 是一个帮助将 C99 兼容代码迁移到 Rust 语言的工具。它提供了以下几个功能:
1. C 到 Rust 的翻译器:这个翻译器(或称为转译器)会产生与输入 C 代码紧密对应的不安全(unsafe)Rust 代码。翻译器的主要目标是生成功能上与输入 C 代码相同的代码。生成安全或符合 Rust 习惯的代码并不是翻译器的目标。相反,C2Rust 团队认为最好的方法是使用专门的重构工具逐步重写翻译后的 Rust 代码。为此,他们正在构建一个重构工具,将不安全的自动翻译 Rust 代码重写为更安全的习语。
2. Rust 代码重构工具:一些重构工作需要手工完成,这可能会引入错误。C2Rust 提供了 clang 和 rustc 的插件,允许你编译和运行两个二进制文件,并检查它们的行为是否相同(在函数调用的层面上)。
3. 交叉检查工具:这些工具用于交叉检查 C 代码与新 Rust 代码的执行情况,以确保它们在功能上是相同的。
C2Rust 的翻译器专注于支持 C99 标准。C 源代码在使用 C2Rust 的工具进行翻译之前,会使用 clang 进行解析和类型检查。
该项目在 BSD-3 许可证下可用,源代码和使用说明可以在它们的 git 仓库中找到。
可以从 crates.io 安装,也可以直接从 Git 仓库安装。安装前需要确保你的系统上安装了 LLVM 7 或更高版本及其对应的 clang 编译器和库,Python 3.6 或更高版本,CMake 3.4.3 或更高版本,以及 openssl(1.0)。
使用 C2Rust 翻译 C 代码到 Rust 的基本命令是:
c2rust transpile compile_commands.json
其中 compile_commands.json 是一个描述 C 构建的文件,许多构建系统可以自动生成这个文件。一旦你有了这个文件,就可以使用上述命令将 C 代码翻译成 Rust。
C2Rust 还在积极开发中,最近增加了对最新 Rust 夜间构建的支持,增加了一些新功能和 bug 修复,并为了引入一种新的生成安全 Rust 代码的方法,暂时放弃了 c2rust-refactor 工具。