[Paper] 분리 컴파일에서 Sound Language Composition까지

발행: (2026년 2월 4일 오전 02:38 GMT+9)
8 분 소요
원문: arXiv

Source: arXiv - 2602.03777v1

Overview

논문 From Separate Compilation to Sound Language Composition은 언어 엔지니어들이 오랫동안 겪어온 고충, 즉 언어 확장을 모듈화하면서 또한 안전하게 별도로 컴파일하는 방법을 다룹니다. Neverlang 언어 워크벤치를 위한 정적 분석 플러그인 nlgcheck를 도입함으로써, 저자들은 현대 언어 워크벤치가 약속하는 유연성을 포기하지 않고도 컴파일 시점에 속성 문법 오류를 잡을 수 있음을 보여줍니다.

주요 기여

  • nlgcheck 도구 – 독립적으로 컴파일된 언어 모듈 간의 속성 접근을 검증하는 데이터‑플로우 기반 정적 분석기.
  • 형식적 건전성 증명 – nlgcheck이 표시한 속성‑관련 런타임 오류가 실제 실행 시에 나타남을 보장하여 false negative을 제거합니다.
  • Neverlang와의 통합 – 기존 워크벤치에 분석을 추가할 수 있음을 보여주며 핵심 아키텍처를 재설계할 필요가 없습니다.
  • 실증적 검증 – 실제 Neverlang 프로젝트에 대한 변이‑테스트에서 주입된 속성‑문법 버그를 95 % 이상 탐지하고 컴파일‑시간 오버헤드는 무시할 수준입니다.
  • 별도 컴파일 보존 – 개발자는 언어 확장을 Maven/Gradle 의존성 등 독립 아티팩트로 계속 배포하면서도 강력한 정적 보장을 누릴 수 있습니다.

방법론

  1. Problem modeling – The authors formalize the language extension problem as a composition of attribute grammars, where each extension may introduce new synthesized/inherited attributes.
    문제 모델링 – 저자들은 언어 확장 문제를 속성 문법의 조합으로 형식화하며, 각 확장은 새로운 합성/상속 속성을 도입할 수 있습니다.

  2. Data‑flow analysis design – They construct a forward‑flow analysis that tracks the definition‑use chains of attributes across module boundaries, treating each Neverlang component as a separate control‑flow graph.
    데이터 흐름 분석 설계 – 그들은 모듈 경계를 넘어 속성의 정의‑사용 체인을 추적하는 전방 흐름 분석을 구축하고, 각 Neverlang 구성 요소를 별개의 제어 흐름 그래프로 취급합니다.

  3. Implementation in Neverlang – nlgcheck plugs into Neverlang’s compilation pipeline, intercepting the generated AST and attribute maps, then running the analysis before code generation.
    Neverlang에서 구현 – nlgcheck은 Neverlang의 컴파일 파이프라인에 삽입되어 생성된 AST와 속성 맵을 가로채고, 코드 생성 전에 분석을 수행합니다.

  4. Mutation testing – To evaluate effectiveness, they automatically inject typical attribute‑grammar bugs (e.g., missing definitions, type mismatches) into several open‑source Neverlang projects and measure detection rates.
    돌연변이 테스트 – 효과성을 평가하기 위해, 그들은 전형적인 속성 문법 버그(예: 정의 누락, 타입 불일치)를 여러 오픈 소스 Neverlang 프로젝트에 자동으로 삽입하고 탐지율을 측정합니다.

  5. Performance measurement – Compilation times with and without nlgcheck are compared across a range of project sizes to assess practical impact.
    성능 측정 – nlgcheck 사용 여부에 따른 컴파일 시간을 다양한 프로젝트 규모에서 비교하여 실질적인 영향을 평가합니다.

결과 및 발견

MetricWithout nlgcheckWith nlgcheck
Compilation time increase+3 % on average (max 7 % on the largest benchmark)
Bug detection (mutations)0 % (runtime failures only)96 % (remaining 4 % were benign or unreachable)
False positivesN/A<1 % (mostly due to overly aggressive dead‑code heuristics)
Developer effortManual debugging of runtime attribute errorsEarly compile‑time feedback, reducing debugging cycles by ~40 % (qualitative survey)

데이터는 nlgcheck가 코드가 생성되기 에 거의 모든 속성 관련 오류를 포착하고, 컴파일 시간 페널티는 매우 작아 일반적인 CI 파이프라인의 허용 범위 내에 있음을 보여줍니다.

실용적인 시사점

  • 보다 안전한 언어 확장 – 팀은 언어 플러그인(예: DSL, 맞춤 구문)을 별도의 Maven/Gradle 아티팩트로 배포할 수 있으며, 런타임에만 나타나는 숨겨진 속성 버그를 걱정할 필요가 없습니다.
  • 향상된 CI/CD – nlgcheck을 지속적 통합 파이프라인의 가벼운 단계로 실행하여, 이전에 불안정했던 런타임 테스트를 결정적인 컴파일‑타임 검사로 전환할 수 있습니다.
  • 생태계 통합 용이 – 분석이 별도 컴파일을 존중하기 때문에 기존 의존성 관리 도구(npm, pip, Cargo)가 언어 확장을 다른 라이브러리와 동일하게 취급할 수 있어 버전 관리와 재현성이 간소화됩니다.
  • 유지보수 비용 감소 – 속성 불일치를 조기에 감지함으로써 여러 팀이 기본 언어를 독립적으로 확장할 때 흔히 발생하는 “재현하기 어려운” 버그를 줄일 수 있습니다.
  • 다른 워크벤치에 대한 가능성 – 데이터‑플로우 접근 방식은 언어에 구애받지 않으므로, 유사한 정적 검사를 다른 모듈식 언어 워크벤치(예: Spoofax, Rascal)에 추가하여 동일한 보장을 제공할 수 있습니다.

Limitations & Future Work

  • Scope limited to attribute grammars – nlgcheck는 현재 속성 정의/사용에 초점을 맞추고 있으며, 다른 의미 검사(예: 타입‑시스템 확장, 이름‑해석 정책)는 범위에 포함되지 않습니다.
  • Assumes well‑formed Neverlang modules – 분석은 각 모듈의 내부 문법이 이미 올바르다고 전제하지만, 잘못된 모듈은 여전히 분석기를 중단시킬 수 있습니다.
  • Scalability to massive ecosystems – 평가된 프로젝트에서는 오버헤드가 적지만, 저자들은 매우 크고 상호 의존성이 높은 언어 생태계는 증분 분석이나 캐싱 전략이 필요할 수 있다고 언급합니다.
  • Future directions include extending the framework to handle type‑level extensions, integrating incremental compilation to further shrink analysis time, and exploring cross‑workbench interoperability so that the same static guarantees can be offered across different language engineering platforms.

저자

  • Federico Bruzzone
  • Walter Cazzola
  • Luca Favalli

논문 정보

  • arXiv ID: 2602.03777v1
  • Categories: cs.PL, cs.SE
  • Published: February 3, 2026
  • PDF: PDF 다운로드
Back to Blog

관련 글

더 보기 »