使用大型语言模型(LLMs)修复 Rust 代码中的编译错误 - 微软研究院

主要观点:

  • Microsoft Research 的 Aseem Rastogi 和 Pantazis Deligiannis 讨论了在 ICSE’2025 上使用大型语言模型(LLMs)进行安全低级编程的技术成果。
  • 结果表明 LLMs 可推断遗留 C 代码中的机器可检查内存安全不变量,以及帮助修复 Rust 代码库中的编译错误。

关键信息:

  • 低级语言如 C 和 C++缺乏内存安全是软件安全漏洞的主要原因之一,微软研究估计每年 70%的安全漏洞与内存安全问题有关。
  • 研究提出了安全的 C 方言如 Checked C,但添加注释和代码重构的成本成为采用这些工具的瓶颈。
  • 利用预训练的 LLMs 帮助进行代码重构和推断采用 Checked C 所需的源注释,通过将任务分解为小的子任务并添加相关符号上下文放入 LLM 提示中。
  • 开发了工具 MSA 并在多达 20,000 行代码的真实代码库上进行评估,MSA 可推断出最先进符号工具无法推断的 86%的注释。
  • Rust 编程语言因其内存和并发安全保证成为构建低级软件系统的可行选择,但对开发者来说有学习曲线,尤其是遇到编译错误时。
  • 开发了 RustAssistant 工具,利用先进的 LLMs 自动为 Rust 编译错误提供修复,在 GitHub 上流行的开源 Rust 存储库中可达到约 74%的峰值准确率。
  • RustAssistant 工作步骤包括构建代码和解析构建错误、提取相关代码片段和错误细节并包装成提示发送给 LLM、LLM 生成建议的修复并应用到代码库中,若有新错误则迭代直到代码无编译错误。

重要细节:

  • 在 Checked C 中,需为输入数组的函数添加注释以确保内存安全,如告知编译器数组至少有 n 个元素。
  • RustAssistant 捕捉编译器生成的详细错误消息,包括错误代码、位置及相关文档和示例,提取相关代码片段和错误细节并包装成提示发送给 LLM。
  • LLM 生成的建议修复以代码差异形式呈现,只包含新的、编辑或删除的代码行,RustAssistant 解析并应用修复后再次运行编译器验证。
  • 在评估中,RustAssistant 在 GitHub 上的前 100 个 Rust 存储库上进行了评估,显示出约 74%的峰值准确率。
阅读 28
0 条评论