摘要
静态语义丰富的语言(如Rust)为AI生成的代码提供了更强的保证,但其严格性使生成过程更具挑战性。现有编译器在生成后提供有用反馈,但未能指导自回归LLM解码过程中的中间生成步骤。受限解码通过在采样过程中拒绝无效标记进行更早的干预,但这需要白盒模型访问和昂贵的语义约束重新实现。
我们提出了生成式编译,这是获取编译器在生成过程中的部分程序反馈的首个方法。其核心技术设备是sealor:一种轻量级、主要基于语法的转换,它将部分程序转换为标准编译器可以诊断的完整程序。sealor的设计确保可完成的部分程序不会被拒绝,同时保留足够的代码上下文,以便早期捕捉到真正的死胡同。
我们在核心Rust类计算上构建了这样的sealor,并证明它满足这些属性,所有过程均在Lean中实现。我们将其扩展到第一个真实Rust的部分程序检查器。我们在具有挑战性的Rust编码任务上评估了我们的方法,涵盖了前沿的黑盒和开放权重模型。结果表明,生成式编译减少了不编译输出并提高了功能正确性,相较于标准的后生成反馈。它通过在生成早期检测广泛的错误,减少错误级联并实现针对性的诊断,推动编译器成为AI辅助编程的第一公民,而不是单纯的后生成检查工具。
博主点评: 生成式编译的提出为AI驱动的代码生成提供了新的思路,通过即时反馈机制有效降低了错误率,提升了编程效率。这一研究不仅展示了编译器在生成过程中的重要性,也为未来的编程工具开发铺平了道路。它的实现将极大改善开发者的编程体验,值得关注。