生成式编译:AI生成代码时的即时编译器反馈
摘要
本文介绍了生成式编译,一种在AI生成代码过程中获取部分程序编译器反馈的方法,利用“sealor”变换使得标准编译器能够诊断不完整的代码。在Rust编码任务上的评估表明,该方法通过及早捕获错误,减少了无法编译的输出并提高了功能正确性。
查看缓存全文
缓存时间: 2026/07/16 21:45
论文页面 - 生成式编译:AI生成代码时的即时编译器反馈
来源:https://huggingface.co/papers/2607.13921 发布于 7月15日
·
提交者 https://huggingface.co/nmuendler
Niels (https://huggingface.co/nmuendler)于7月16日
摘要
具有丰富静态语义的语言(如Rust)为AI生成代码提供了更强的保证,但其严格性也使得生成变得更加困难。现成的编译器可以在生成后提供有用的反馈,但无法指导中间生成步骤(例如自回归LLM解码过程中的步骤)。受约束的解码通过在采样过程中拒绝无效token来更早介入,但需要白盒模型访问,并且为语义约束重新实现的成本高昂。我们引入了生成式编译(generative compilation),这是第一种在生成过程中获取部分程序编译器反馈的方法。核心技术手段是sealor:一种轻量级、主要由语法引导的转换,它将部分程序转换为完整程序,标准编译器可以对这些完整程序进行诊断。它的设计使得可完成的部分程序永远不会被拒绝,同时保留足够的代码上下文以尽早捕获真正的死胡同。我们在类似Rust的核心演算上构建了这样的sealor,并证明它满足这些性质,所有证明均在Lean中机械化实现。我们将其扩展到第一个用于真实Rust的部分程序检查器。我们在具有挑战性的仓库级Rust编码任务上评估了我们的方法,涉及前沿黑盒模型和开放权重模型。我们表明,与标准的生成后反馈相比,生成式编译减少了非编译输出并提高了功能正确性。它通过在生产过程中及早检测接近错误源的广泛错误类型来实现这一点,从而减少错误级联并实现有针对性的诊断。更广泛地说,生成式编译是朝着让编译器成为AI辅助编程的一等公民(在生成过程中主动参与,而非作为单独的生成后检查)迈出的一步。
查看 arXiv 页面 (https://arxiv.org/abs/2607.13921)查看 PDF (https://arxiv.org/pdf/2607.13921)GitHub (https://github.com/eth-sri/generative-compilation)添加到收藏 (https://huggingface.co/login?next=%2Fpapers%2F2607.13921)
引用本文的模型0
没有模型链接此论文
请在模型 README.md 中引用 arxiv.org/abs/2607.13921,以便从此页面链接。
引用本文的数据集2
eth-sri/CRUST-bench 查看器•更新于 28分钟前 • 117 (https://huggingface.co/datasets/eth-sri/CRUST-bench)
eth-sri/API-Upgrade 查看器•更新于 28分钟前 • 34 (https://huggingface.co/datasets/eth-sri/API-Upgrade)
引用本文的 Spaces0
没有 Space 链接此论文
请在 Space README.md 中引用 arxiv.org/abs/2607.13921,以便从此页面链接。
包含本文的收藏集1
相似文章
AI生成代码的质量
这篇文章讨论了一个担忧:随着AI工具生成越来越多的代码,未来基于这些合成代码训练的模型可能会质量下降、原创性降低,并询问像OpenAI、Anthropic和GitHub这样的主要AI实验室计划如何应对这个问题。
当AI代码生成工具真正了解你的代码库时,Go语言中的AI代码生成效果会显著提升
本文认为,当AI代码生成工具了解组织内部的代码库和约定时,Go语言的代码生成会更有效,从而提高接受率并减少所需编辑次数。
对于让AI代理发挥作用,反馈系统比模型更重要吗?
讨论反馈系统(静态分析、覆盖率工具、性能分析)比选择LLM对于让AI代理发挥效用更为关键,并以Oracle为GraalVM Native Image反射元数据生成测试的工作为例进行说明。
大规模生产代码库中的代理式编码:成功、失败模式与防护措施
来自数据库、iOS、前端、数据工程和后端领域的工程师讨论了AI代码生成如何将难点转移到验证和集成上,需要人类对细微风险和架构适配性做出判断。
用AI写更好的代码,但更慢
Nolan Lawson认为,AI编程助手可以通过使用多个模型进行彻底的代码审查和漏洞检测,从而更慢地编写高质量代码,提升代码库的健康状况,而不是最大化输出速度。