CRUST-Bench: 一个针对 C 到安全 Rust 转译的综合性基准测试

发表
Anirudh KhatryAnirudh Khatry 提交
作者: Anirudh KhatryAnirudh Khatry, Robert Zhang, Jia Pan, Ziteng Wang, Qiaochu Chen, Greg DurrettGreg Durrett, Isil Dillig

摘要

C 到 Rust 的转译对于现代化遗留 C 代码、同时增强安全性以及与现代 Rust 生态系统的互操作性至关重要。然而,目前尚无数据集用于评估系统是否能将 C 代码转译成可通过一组测试用例的安全 Rust 代码。我们引入了 CRUST-Bench,这是一个包含 100 个 C 代码仓库的数据集,每个仓库都配有手动编写的安全 Rust 接口以及可用于验证转译正确性的测试用例。通过考虑整个仓库而不是孤立的函数,CRUST-Bench 捕捉了翻译包含多文件依赖关系的复杂项目的挑战。提供的 Rust 接口提供了明确的规范,确保遵守惯用的、内存安全的 Rust 模式,而配套的测试用例则强制执行功能正确性。我们评估了最先进的大型语言模型(LLMs)在该任务上的表现,发现生成安全且惯用的 Rust 代码对于各种最先进的方法和技术来说仍然是一个具有挑战性的问题。我们还提供了关于 LLMs 在将 C 代码转译为安全 Rust 代码时通常会犯的错误的一些见解。性能最佳的模型 OpenAI o1 在单次尝试设置下只能解决 15 个任务。在 CRUST-Bench 上的改进将促使转译系统的改进,使其能够推理复杂场景,并帮助将遗留代码库从 C 迁移到 Rust 等确保内存安全的语言。您可以在 https://github.com/anirudhkhatry/CRUST-bench 找到数据集和代码。
查看 arXiv 页面查看 PDF

评论

Anirudh KhatryAnirudh Khatry
论文作者
论文提交者

🚀介绍 CRUST-Bench,这是一个用于完整代码库 C 到 Rust 转换的数据集 🛠️

一个包含 100 个来自不同领域的真实世界 C 仓库的数据集,每个仓库都配有:

🦀 手写的安全 Rust 接口。

🧪 用于验证正确性的 Rust 测试用例。

t1_2.png

将 C 代码转换为 Rust 有助于通过内存安全保证来现代化遗留代码。CRUST-Bench 评估转换方法是否生成安全、符合 Rust 习惯的代码,使用手工制作的接口和测试来确保安全性和验证正确性。

interface.png

我们的基准测试首次提供了:

  1. Rust 测试

  2. Rust 接口,这些接口对于转换后的代码与测试配合使用是必需的

  3. 数量可观的真实规模的转换问题。

comp.png

Screenshot 2025-04-23 at 11.42.37 AM.png

我们在 CRUST-Bench 上评估了最先进的闭源 LLM(如 o1、Claude-3.7 和 Gemini-1.5-Pro)、开源模型(如 QwQ-32B 和 virtuoso-32B)以及 SWE-Agent。

即使是最好的模型——OpenAI 的 o1——在单次尝试设置下也仅能通过 100 个任务中的 15 个。

语言模型通常未能做到:

  1. 遵守所有权规则

  2. 推断类型信息

  3. 遵循符合习惯的 Rust 接口

  4. 保留正确的生命周期

在论文中,我们提供了常见的 LLM 错误分类。

请阅读完整论文以了解更多详情。