← 最新论文
💻 computer science

AdaTrans: Automated C to Rust Transformation via Error-Adaptive Repair

AdaTrans 是一个利用策略驱动检索、错误自适应转换以及多阶段验证,成功将 C 代码转换为安全、可编译的 Rust,在实现高通过率的同时最大限度减少 unsafe 构造的自动化框架。

原作者: Xiaofan Liu, Zecan Li, Zhuang Zhao, Ziqi Shuai, Yanming Yang, Qi Xin, Jifeng Xuan

发布于 2026-07-01
📖 2 分钟阅读☕ 轻松阅读

原作者: Xiaofan Liu, Zecan Li, Zhuang Zhao, Ziqi Shuai, Yanming Yang, Qi Xin, Jifeng Xuan

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

以下是关于 AdaTrans 论文的解释,已将其转化为通俗易懂的语言,并使用了创意类比。

宏观图景:将危险语言翻译为安全语言

想象你拥有一座巨大的图书馆,里面全是用 C 语言编写的旧书。C 语言是一种极其快速且强大的编程语言,但它也以“危险”著称。在 C 语言中,作者(程序员)是维护建筑安全的唯一责任人。如果他们忘记锁门(释放内存)或留下一扇没关的窗户(悬空指针),整个房子都可能毁于一旦(崩溃或被黑客攻击)。

现在,想象你想把这些书搬到一个由 Rust 建造的新大楼里。Rust 是一种现代语言,它就像一位超级严格的建筑检查员。除非你能逐页证明每一扇门都已锁好、每一扇窗户都已加固,否则它不会让你写书。如果你试图夹带任何危险的习惯,检查员就会砰地一声关上门,对你说:“不行,不准通过。”

问题所在:
几十年来,从 C 迁移到 Rust 一直是一场噩梦。

  1. 体力活: 手动迁移耗时耗力。
  2. 旧工具: 现有的自动化工具往往在“作弊”。它们虽然写出了代码,但会将危险部分隐藏在 “unsafe” 标签后面,实际上是在无视建筑检查员。
  3. AI 的困境: 新型的人工智能(LLM)虽然能写代码,但它们就像是才华横溢的作家,却不理解 Rust 严苛的建筑规范。它们写出的故事非常优美,但由于一个微小的安全违规,会被检查员立即拒之门外。

解决方案:AdaTrans
作者开发了 AdaTrans,这是一个聪明的系统,它不仅仅是在靠猜,而是通过从错误中学习,将 C 代码翻译成安全的 Rust 代码。你可以把它想象成一个 大师级建筑师与一组检查员 在循环中协同工作。


AdaTrans 如何运作:三步舞曲

该系统在一个 尝试 → 检查 → 修复 的持续循环中运行。以下是它处理过程的方式:

1. “多阶段检查”(第一阶段)

当 AI 尝试翻译一段 C 代码时,AdaTrans 会立即通过两项测试:

  • 语法检查: 代码看起来是否符合 Rust 的语法规范?(例如:是否缺少分号)。
  • 安全性与逻辑检查: 代码是否能在不违反 Rust 严格安全规则的情况下编译通过?并且它实现的功能是否与原始 C 代码一致?
  • 结果: 如果失败了,系统不会只说“错误”,它会对错误进行分类。是拼写错误?是安全违规?还是逻辑本身错了?

2. “专业图书管理员”(第二阶段:策略驱动的 RAG)

这是整个操作的大脑。AdaTrans 不仅仅是将原始错误信息展示给 AI(因为错误信息通常令人困惑),它更像是一位 专业的图书管理员

  • 如果错误是 拼写错误(语法),图书管理员会递给 AI 一份“语法修正”小抄。
  • 如果错误涉及 安全性(所有权),图书管理员会递上一本包含如何安全处理内存具体案例的《Rust 安全手册》。
  • 如果错误是 逻辑问题(代码能运行但结果不对),图书管理员会给 AI 一个“创造性思维”提示,让它重新思考整个算法。

类比: 想象你在修理汽车。

  • 如果是轮胎没气了,你不需要叫机械师去重组引擎;你只需要一个补胎工具包。
  • 如果引擎发出异响,你不能只是拧紧一个螺栓;你需要进行深度诊断。
    AdaTrans 确保 AI 能针对 特定 问题获得 正确 的工具。

3. “自适应温度”(第三阶段:ESTS)

这是核心秘诀。当 AI 尝试修复代码时,它必须决定该表现得多么“有创意”或“谨慎”。AdaTrans 通过控制一个“温度”旋钮来控制这一点:

  • 低温度(谨慎): 对于简单的拼写错误,AI 被要求非常精确,严格遵守规则,不要进行任何大胆的猜测。
  • 中等温度(平衡): 对于安全错误,AI 被要求探索组织内存的几种不同方式,但仍需保持在规则范围内。
  • 高温度(创意): 如果逻辑出错(例如数学计算有误),AI 被要求打破常规,尝试全新的结构。它需要跳出当前的思维模式才能找到正确的解决方案。

“卡壳”检测器:
如果 AI 反复犯同样的错误(就像狗追自己的尾巴一样),AdaTrans 会察觉到这种“停滞”。它会按下 重置按钮,丢弃当前的尝试,并从原始 C 代码开始,以全新的状态重新开始。这防止了 AI 在死胡同里浪费时间。


结果:奏效了吗?

作者在 104 个不同的编程谜题(源自 AI 未曾见过的 LeetCode 竞赛题目)上进行了测试。

  • 成功率: AdaTrans 成功将约 81% 的问题翻译成了既 安全(没有危险的 "unsafe" 代码块)又 正确(通过所有测试)的 Rust 代码。
  • 对比:
    • 旧 AI(零样本/Zero-shot): 没有这个特殊系统,AI 在第一次尝试时的正确率仅为 25% 左右。即使你让它随机尝试 100 次,也只能达到 70%。而 AdaTrans 通过一次智能的迭代过程就达到了 81%
    • 旧工具: 传统工具(如 c2rust)虽然可以编译代码,但它们充满了 "unsafe" 代码块(即通过“作弊”绕过安全规则)。AdaTrans 则保持了 99% 的安全性
    • 其他 AI 工具: 其他近期的 AI 工具由于无法处理复杂的逻辑错误,成功率很难突破 20%。

总结

AdaTrans 证明了你不需要在“快速翻译”和“安全代码”之间做选择。通过教导 AI 去:

  1. 倾听 特定类型的错误,
  2. 咨询 针对该错误的专业知识,以及
  3. 调整 其创造力水平以应对不同难度,

……它就能成功地将危险的旧代码迁移到现代且安全的代码中。这就像是给了 AI 一张地图、一个指南针,以及一位知道何时该小心行走、何时该放手一搏的向导。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →