paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Program splicing

程序拼接(Program Splicing)
ICSE Proceedings of the 40th International Conference on Software Engineering2018匹配度 2/10 · 该论文属于程序合成/开发者工具,通过代码片段数据库与枚举搜索补全草稿,与用户关注的静态分析、LLM/Agent 改进静态分析、浮点程序分析或贝叶斯程序分析均无直接交集;仅在最宽泛的 PL+AI 与程序合成方向上有微弱关联。引用 4 inbox
Yanxin Lu, Swarat Chaudhuri, Chris Jermaine, David Melski
crossref: 2026-09-12

AI 速览

一句话:提出程序拼接方法,通过程序合成器与可检索的代码片段数据库交互,自动将草稿补全为满足需求的程序。

论文提出“程序拼接”这一编程方法,旨在自动化程序员在线复制、粘贴并修改代码的工作流。程序员首先编写一个草稿,其中混合了未完成的代码、自然语言注释以及正确性需求。随后,一个与大型可检索程序片段数据库交互的合成器被用来把草稿自动补全为满足需求的程序。整个合成过程分为两个阶段:首先,合成器识别数据库中与当前合成任务相关的小部分程序;其次,它利用枚举式搜索,系统地用这些相关程序中的表达式和语句填充草稿。生成的程序会返回给程序员,程序员可以对其进行修改,并可能触发额外的多轮合成。该工作将代码复用、程序合成与交互式开发流程结合起来。

问题
研究如何自动化程序员从在线资源中复制、粘贴并修改代码的繁琐工作流,使其从包含未完成代码、自然语言注释和正确性需求的草稿出发,自动获得满足需求的完整程序。
方法
提出程序拼接:程序员编写混合了代码片段、自然语言注释和需求的草稿,合成器与大型可检索程序片段数据库交互,先在数据库中定位少量相关程序,再通过枚举式搜索用其中的表达式和语句系统地填充草稿。
评估
摘要描述了以草稿和正确性需求为输入的交互式两阶段合成流程,并支持将结果返回给程序员修改及追加多轮合成;摘要中未报告具体实验评估数据。
原文摘要(Abstract)

We introduce program splicing, a programming methodology that aims to automate the workflow of copying, pasting, and modifying code available online. Here, the programmer starts by writing a "draft" that mixes unfinished code, natural language comments, and correctness requirements. A program synthesizer that interacts with a large, searchable database of program snippets is used to automatically complete the draft into a program that meets the requirements. The synthesis process happens in two stages. First, the synthesizer identifies a small number of programs in the database that are relevant to the synthesis task. Next it uses an enumerative search to systematically fill the draft with expressions and statements from these relevant programs. The resulting program is returned to the programmer, who can modify it and possibly invoke additional rounds of synthesis.

链接与引用

DOI 原文 ·

BibTeX
@inproceedings{paperbot4513,
  title = {Program splicing},
  author = {Yanxin Lu and Swarat Chaudhuri and Chris Jermaine and David Melski},
  booktitle = {ICSE},
  year = {2018},
  doi = {10.1145/3180155.3180190}
}