EVOC2RUST:一个用于项目级C到Rust翻译的骨架引导框架

发表
YulingYuling 提交
作者: Chaofan Wang, Tingrui Yu, Jie Wang, Dong Chen, Wenrui Zhang, YulingYuling Shi, Xiaodong Gu, Beijun Shen

摘要

Rust 的编译时安全保证使其成为安全关键系统的理想选择,从而产生了将遗留 C 代码库转换为 Rust 的需求。虽然针对此任务出现了各种方法,但它们面临着固有的权衡:基于规则的解决方案在满足代码安全性和惯用性要求方面面临挑战,而基于 LLM 的解决方案由于整个代码库模块的重度依赖,往往无法生成语义等效的 Rust 代码。最近的研究表明,这两种解决方案都仅限于小规模程序。在本文中,我们提出了 EvoC2Rust,一个用于将整个 C 项目转换为等效 Rust 项目的自动化框架。EvoC2Rust 采用骨架引导翻译策略进行项目级翻译。该管道包含三个进化阶段:1)首先将 C 项目分解为功能模块,采用特征映射增强型 LLM 来转换定义和宏,并生成类型检查的函数存根,从而形成一个可编译的 Rust 骨架;2)然后逐步翻译函数,替换相应的存根占位符;3)最后,通过集成 LLM 和静态分析来修复编译错误。通过进化增强,EvoC2Rust 结合了基于规则和基于 LLM 解决方案的优点。我们对开源基准和六个工业项目的评估表明,EvoC2Rust 在项目级 C 到 Rust 翻译方面表现优异。平均而言,它在语法和语义准确性方面比基于 LLM 的方法提高了 17.24% 和 14.32%,并且代码安全率比基于规则的工具高 96.79%。在模块级别,EvoC2Rust 在工业项目上达到了 92.25% 的编译通过率和 89.53% 的测试通过率,即使对于复杂的代码库和长函数也是如此。
查看 arXiv 页面查看 PDF

评论

YulingYuling
论文作者
论文提交者

C2Rust 翻译领域的SOTA方法 🔥

来自上海交通大学与华为