ChatPaper.aiChatPaper

Generatief Compileren: On-the-Fly Compilerfeedback bij het Genereren van Code door AI

Generative Compilation: On-the-Fly Compiler Feedback as AI Generates Code

July 15, 2026
Auteurs: Niels Mündler-Sasahara, Hristo Venev, Dawn Song, Martin Vechev, Jingxuan He
cs.AI

Samenvatting

Talen met een rijke statische semantiek, zoals Rust, bieden sterkere garanties voor AI-gegenereerde code, maar hun striktheid maakt generatie moeilijker. Standaardcompilers kunnen na de generatie nuttige feedback bieden, maar begeleiden tussenliggende generatiestappen niet, zoals die tijdens autoregressieve LLM-decodering. Beperkte decodering (constrained decoding) grijpt eerder in door ongeldige tokens tijdens het samplen te verwerpen, maar vereist white-box modeltoegang en kostbare herimplementatie voor semantische beperkingen. Wij introduceren generatieve compilatie, de eerste aanpak om compilerfeedback te verkrijgen over partiële programma's tijdens de generatie. Het centrale technische middel is een sealor: een lichtgewicht, grotendeels syntaxis-geleide transformatie die partiële programma's omzet in complete programma's die standaardcompilers kunnen diagnosticeren. Het is ontworpen zodat partiële programma's die kunnen worden voltooid nooit worden afgewezen, terwijl voldoende codecontext behouden blijft om echte doodlopende wegen vroegtijdig te onderscheppen. We construeren een dergelijke sealor voor een op Rust lijkende calculus en bewijzen dat deze aan deze eigenschappen voldoet, allemaal gemechaniseerd in Lean. We breiden dit uit tot de eerste controleur voor partiële programma's voor echt Rust. We evalueren onze methode op uitdagende Rust-codeertaken op repository-niveau, zowel voor frontier black-box als open-weight modellen. We tonen aan dat generatieve compilatie het aantal niet-compilerende outputs vermindert en de functionele correctheid verbetert in vergelijking met standaard post-generatie feedback. Dit doet het door een breed scala aan fouten dicht bij hun bron en vroeg tijdens de generatie te detecteren, waardoor foutcascades worden verminderd en gerichte diagnostiek mogelijk wordt. In bredere zin is generatieve compilatie een stap in de richting van het maken van compilers tot eersteklas burgers van AI-ondersteund programmeren die actief zijn tijdens de generatie, in plaats van een aparte post-generatie controle.
English
Languages with rich static semantics, such as Rust, provide stronger guarantees for AI-generated code, but their strictness makes generation more difficult. Off-the-shelf compilers can provide useful feedback post-generation, but does not guide intermediate generation steps, such as those during autoregressive LLM decoding. Constrained decoding intervenes earlier by rejecting invalid tokens during sampling, but requires white-box model access and costly reimplementation for semantic constraints.We introduce generative compilation, the first approach to obtaining compiler feedback on partial programs during generation. The core technical device is a sealor: a lightweight, mostly syntax-guided transformation that converts partial programs into complete ones that standard compilers can diagnose. It is designed such that possible-to-complete partial programs are never rejected, while preserving enough code context to catch genuine dead ends early. We construct such a sealor on a core Rust-like calculus and prove that it satisfies these properties, all mechanized in Lean. We extend it to the first partial-program checker for real Rust. We evaluate our method on challenging repository-level Rust coding tasks, across both frontier black-box and open-weight models. We show that generative compilation reduces non-compiling outputs and improves functional correctness, relative to standard post-generation feedback. It does so by detecting a broad range of errors close to their source and early during generation, thereby reducing errors cascades and enabling focused diagnostics. More broadly, generative compilation is a step toward making compilers a first-class citizen of AI-assisted programming active during generation, rather than a separate post-generation check.