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 |
| LLVM | LLVM Code Generation |
AOT 컴파일(Ahead-of-time Compilation)은 프로그램을 실제로 실행하기 전에 소스 또는 중간 표현을 대상으로 코드를 생성하는 방식을 말한다. 전통적인 C·C++·Rust의 네이티브 빌드가 대표적이며 .NET Native AOT 등 관리형 언어 생태계에도 존재한다. JIT와의 구분은 주로 코드 생성 시점에 있고, 단순히 '네이티브 언어와 가상 머신 언어의 차이'가 아니다.[1]
사전 컴파일러는 빌드할 CPU 아키텍처와 운영체제 ABI, 호출 규약·시스템 라이브러리의 구성을 고려해 코드를 출력한다. 같은 프로그램이라도 서로 다른 ISA로 실행 파일을 만들어야 할 수 있으며 교차 컴파일에서는 호스트와 다른 대상 플랫폼을 선택한다. 오브젝트 파일과 링커·로더가 실행 파일 생성과 실행을 나눠 담당할 수 있다.
AOT 방식은 런타임에서 컴파일 시간이 필요 없으므로 프로그램의 시작·배포 조건을 단순화할 수 있지만, 실행 중 나타나는 실제 입력·CPU 상태에 대한 동적 특수화 능력은 JIT보다 제한적일 수 있다. 최적화기는 빌드 때 제공된 프로파일이나 링크 시간 분석을 이용할 수 있으므로 사전 컴파일이 항상 동적 실행 환경보다 낮은 성능을 낸다는 것은 아니다.[2]
사전 컴파일 결과물은 플랫폼에 따라 독립 실행 파일·공유 라이브러리 또는 다른 실행 전 준비 자료일 수 있다. AOT가 모든 프로그램의 가비지 컬렉터·동적 링커와 런타임 라이브러리를 제거하는 것은 아니며 언어·사용 기능의 실행 모델에 따라 필요한 구성 요소가 달라진다.