Rust와 같이 풍부한 정적 의미론 (static semantics)을 가진 언어들은 AI가 생성한 코드에 대해 더 강력한 보장을 제공하지만, 이러한 엄격함은 코드 생성을 더 어렵게 만듭니다. 기성 컴파일러 (Off-the-shelf compilers)는 생성 후 유용한 피드백을 제공할 수 있지만, 자기회귀적 (autoregressive) LLM 디코딩 과정과 같은 중간 생성 단계에서는 가이드를 제공하지 못합니다. 제약 조건이 있는 디코딩 (Constrained decoding)은 샘플링 중에 유효하지 않은 토큰을 거부함으로써 더 일찍 개입하지만, 화이트박스 (white-box) 모델 접근 권한이 필요하며 의미론적 제약 조건을 위해 비용이 많이 드는 재구현이 필요합니다.
우리는 생성 과정 중에 부분 프로그램 (partial programs)에 대한 컴파일러 피드백을 얻는 첫 번째 접근 방식인 생성적 컴파일 (generative compilation)을 소개합니다. 핵심 기술 장치는 실러 (sealor)입니다. 이는 표준 컴파일러가 진단할 수 있도록 부분 프로그램을 완전한 프로그램으로 변환하는, 주로 구문 유도 방식 (syntax-guided)의 가벼운 변환 도구입니다. 이는 완성이 가능한 부분 프로그램은 절대 거부하지 않으면서도, 실제 막다른 길 (dead ends)을 조기에 포착할 수 있을 만큼 충분한 코드 문맥 (code context)을 보존하도록 설계되었습니다. 우리는 핵심 Rust 유사 계산법 (core Rust-like calculus) 위에서 이러한 실러 (sealor)를 구축하고, 이것이 이러한 속성들을 만족함을 증명하였으며, 이 모든 과정은 Lean에서 기계화되었습니다. 우리는 이를 실제 Rust를 위한 최초의 부분 프로그램 검사기 (partial-program checker)로 확장했습니다.
우리는 최첨단 블랙박스 (black-box) 모델과 오픈 웨이트 (open-weight) 모델 모두에 대해 도전적인 저장소 수준 (repository-level)의 Rust 코딩 작업에서 우리의 방법을 평가합니다. 우리는 생성적 컴파일이 표준적인 생성 후 피드백 (post-generation feedback)과 비교하여 컴파일되지 않는 출력을 줄이고 기능적 정확성 (functional correctness)을 향상시킨다는 것을 보여줍니다. 이는 오류가 발생한 근원과 가까운 시점, 즉 생성 초기 단계에서 광범위한 오류를 탐지함으로써 오류 연쇄 (errors cascades)를 줄이고 집중적인 진단을 가능하게 함으로써 수행됩니다. 더 넓게 보면, 생성적 컴파일은 컴파일러를 생성 후의 별도 확인 단계가 아니라, 생성 중에 활성화되는 AI 지원 프로그래밍의 일등 시민 (first-class citizen)으로 만드는 단계입니다.