Clx: 네이티브 실행 파일로의 Ahead-of-Time Lua 컴파일
Clx: 네이티브 실행 파일로의 Ahead-of-Time Lua 컴파일
Clx는 Lua 5.5 코드를 독립형 네이티브 실행 파일로 변환하는 크로스 플랫폼 ahead-of-time (AOT) 컴파일러 및 런타임입니다. C++20 백엔드와 현대적인 네이티브 툴체인 (Clang, GCC, MSVC)을 활용함으로써, Clx는 바이트코드 인터프리터의 오버헤드를 제거하여 예측 가능한 런타임 성능과 빠른 시작 시간을 가능하게 합니다.
핵심 목표 및 성능
Clx는 모든 개별 워크로드에 대해 절대적으로 가장 빠른 구현을 목표로 하기보다는 배포 가능성과 예측 가능성을 위해 설계되었습니다. 주요 목표에는 독립형 실행 파일 생성, 빠른 시작 제공, 그리고 네이티브 컴파일러를 통한 강력한 최적화 기회 제공이 포함됩니다.
Intel® Core™ i5 Ultra 125U CPU (Linux, GCC 13.3.0)에서의 성능 벤치마크는 표준 Lua 5.5 인터프리터에 비해 상당한 속도 향상을 보여줍니다:
| Script | Lua 5.5 | LuaJIT | Clx --fast |
|---|---|---|---|
| fib.lua | 1.00x | 6.91x | 62.20x |
| arraysum.lua | 1.00x | 2.46x | 4.13x |
| spectralnorm.lua | 1.00x | 17.22x | 10.69x |
| canada.lua | 1.00x | 2.62x | 1.30x |
| warmup.lua | 1.00x | 1.20x | 1.20x |
기술적 구현 및 최적화
Clx는 메모리 할당을 줄이고 실행 속도를 향상시키기 위해 여러 저수준 최적화를 구현합니다:
- 16-byte Tagged Values: 8-byte 페이로드와 별도의 타입 태그를 사용합니다.
- Inline String Optimization: 6바이트 이하의 문자열은 값 내에 직접 저장되어 힙 할당의 필요성을 제거합니다.
- Fast-path Table Access: 테이블 조회를 가속화하기 위한 캐시를 구현합니다.
- C++20 Backend: 백엔드 컴파일러 (GCC, Clang, 또는 MSVC)에 의해 추가로 최적화될 수 있는 네이티브 코드를 생성합니다.
기능 및 호환성
Clx는 Lua 5.5와의 호환성을 목표로 하며, 핵심 언어, 테이블, 메타테이블, 코루틴, 그리고 대부분의 표준 라이브러리가 이미 구현되어 있습니다.
주요 기능
- Small Binaries:
--minimal플래그를 사용하면 Lua 프로그램을 100 KB 미만의 실행 파일로 컴파일할 수 있습니다. - Flexible Output: 컴파일러는 네이티브 실행 파일, 오브젝트 파일 (
.o/.obj), 정적 모듈 (.a/.lib), 또는 원시 C++ 소스 코드를 생성할 수 있습니다. - C++ API: 이식 가능한 네이티브 모듈 개발을 위한 값 지향형 API를 제공합니다.
알려진 제한 사항
Clx는 순수 AOT 모델이므로 Lua의 특정 동적 기능은 지원되지 않습니다:
- Dynamic Code Loading:
load(),dofile(),loadfile()과 같은 함수는 런타임 인터프리터가 필요하므로 지원되지 않습니다. - Debug Module:
debug모듈은 AOT 환경에서의 구현 복잡성으로 인해 지원되지 않습니다. - C API: 전통적인 Lua C API는 지원되지 않습니다. 개발자는 네이티브 모듈을 위해 clx C++ API를 사용해야 합니다.
시작하기 및 빌드 요구 사항
Clx는 현재 베타 버전입니다. 이를 빌드하고 설치하려면 CMake 3.15+ 및 호환 가능한 C++ 컴파일러가 필요합니다:
- Linux:
g++(Tail Call Optimization을 위해 권장됨) 또는clang++. - macOS:
clang++(Xcode) 또는g++(Homebrew). - Windows:
g++(LLVM) 또는 MSVC.
빠른 시작 명령
git clone https://github.com/samyeyo/clx
cd clx
./build.sh install
clx examples/hello/hello.lua
./hello
프로젝트 상태 및 라이선스
Clx는 MIT License 하에 출시되었으며, 현재 호환성 및 최적화 개선을 위한 작업이 진행 중인 베타 버전입니다.