AOT 컴파일

AOT 컴파일(Ahead-of-time Compilation)은 프로그램을 실제로 실행하기 전에 소스 또는 중간 표현을 대상으로 코드를 생성하는 방식을 말한다. 전통적인 C·C++·Rust의 네이티브 빌드가 대표적이며 .NET Native AOT 등 관리형 언어 생태계에도 존재한다. J...

정식 명칭Ahead-of-time Compilation
한국어 명칭사전 컴파일
분류프로그램 코드 생성 시점에 따른 컴파일 방식
출력실행 전 네이티브 코드·목적 코드 등
주요 사용C·C++·Rust·NativeAOT 등
비교JIT 컴파일, 인터프리터
빌드대상 CPU·OS·ABI·라이브러리 결정
대표 기술GCC·Clang·.NET Native AOT
정적·동적 링크방식에 따라 런타임 필요
참조.NET Native AOT
LLVMLLVM Code Generation

AOT 컴파일(Ahead-of-time Compilation)은 프로그램을 실제로 실행하기 전에 소스 또는 중간 표현을 대상으로 코드를 생성하는 방식을 말한다. 전통적인 C·C++·Rust의 네이티브 빌드가 대표적이며 .NET Native AOT 등 관리형 언어 생태계에도 존재한다. JIT와의 구분은 주로 코드 생성 시점에 있고, 단순히 '네이티브 언어와 가상 머신 언어의 차이'가 아니다.[1]

사전 컴파일러는 빌드할 CPU 아키텍처와 운영체제 ABI, 호출 규약·시스템 라이브러리의 구성을 고려해 코드를 출력한다. 같은 프로그램이라도 서로 다른 ISA로 실행 파일을 만들어야 할 수 있으며 교차 컴파일에서는 호스트와 다른 대상 플랫폼을 선택한다. 오브젝트 파일과 링커·로더가 실행 파일 생성과 실행을 나눠 담당할 수 있다.

AOT 방식은 런타임에서 컴파일 시간이 필요 없으므로 프로그램의 시작·배포 조건을 단순화할 수 있지만, 실행 중 나타나는 실제 입력·CPU 상태에 대한 동적 특수화 능력은 JIT보다 제한적일 수 있다. 최적화기는 빌드 때 제공된 프로파일이나 링크 시간 분석을 이용할 수 있으므로 사전 컴파일이 항상 동적 실행 환경보다 낮은 성능을 낸다는 것은 아니다.[2]

사전 컴파일 결과물은 플랫폼에 따라 독립 실행 파일·공유 라이브러리 또는 다른 실행 전 준비 자료일 수 있다. AOT가 모든 프로그램의 가비지 컬렉터·동적 링커와 런타임 라이브러리를 제거하는 것은 아니며 언어·사용 기능의 실행 모델에 따라 필요한 구성 요소가 달라진다.

역사

정의와 목적

핵심 개념 및 동작

응용 사례와 도구

성능·정확성과 제약

관련 문서

  1. Microsoft Learn: Native AOT deployment ↩
  2. LLVM Code Generation ↩