论文
C2RustXW:通过程序分析和 LLM 进行程序结构感知的 C 到 Rust 转换
C2RustXW: Program-Structure-Aware C-to-Rust Translation via Program Analysis and LLM
摘要
Rust 因其内存安全性和性能而得到越来越多的采用,增加了对遗留 C 代码库有效迁移的需求。然而,现有的基于规则的翻译器(例如 \ctorust)经常生成冗长的、非惯用的代码,这些代码保留了不安全的 C 语义,限制了可读性、可维护性和实际采用。此外,此类输出的手动后处理是劳动密集型的,并且很少产生高质量的 Rust 代码,这对大规模迁移构成了重大障碍。为了解决这些限制,我们提出了 \tool,一种程序结构感知的 C 到 Rust 转换方法,它将程序分析与 大语言模型 (LLM) 集成在一起。 \tool 提取多级程序结构,包括全局符号、函数依赖性以及控制流和数据流信息,并将这些信息编码为注入到 LLM 提示中的结构化文本表示,以指导翻译和修复。基于此设计,\tool 执行依赖感知翻译,并采用多阶段修复管道,结合基于规则和结构引导的 LLM 技术来确保语法正确性。为了语义正确性,\tool 进一步将基于执行的验证与结构引导推理相结合,以定位和修复行为不一致。实验结果表明,\tool 在 CodeNet 上实现了 100\% 语法正确性,在 GitHub 上实现了 97.78\% 语法正确性,同时显着减少了代码大小(高达 43.70\%)和不安全使用(高达 5.75\%)。在项目层面,\tool 实现了完美的语法正确性和 78.87\% 的平均语义正确性,展示了其实用且可扩展的 C 到 Rust 迁移的有效性。