피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Runtime 없는 x86-64 직접 방출로 GCC 대비 1100배 크기 감소
A compiler written in its own language just emitted a standalone Linux executable
AI 요약
Context
기존 컴파일러의 런타임, GC, 표준 라이브러리 의존성으로 인한 바이너리 크기 증가와 오버헤드 문제 발생. 가독성과 검증 가능성을 최우선으로 하여 외부 의존성을 완전히 제거한 초경량 실행 파일 생성이 필요함.
Technical Solution
- Runtime, GC, libc를 완전히 배제한 standalone x86-64 machine code 직접 방출 설계
- 컴파일러의 코드 생성기(Code Generator) 자체를 Verbose 언어로 작성한 self-hosting 구조 구현
- @proof termination 및 도메인 제약([0, 20]) 설정을 통한 재귀 종료 보장 및 메모리 안전성 확보
- 2-pass 생성 방식(측정 후 작성)을 적용하여 분기문의 정확한 jump offset 계산 및 배치
- ELF64 헤더와 LOAD 프로그램 헤더를 직접 생성하여 OS가 즉시 실행 가능한 바이너리 패키징
- 최적화 단계(LLVM 등)를 의도적으로 제외하여 모든 바이트를 추적 가능한 auditable emitter로 구축
실천 포인트
- 시스템의 Auditability가 최우선인 경우, LLVM 같은 복잡한 백엔드 대신 단순한 Emitter 설계 검토 - Zero-dependency 바이너리 구현을 위해 OS별 실행 파일 포맷(ELF 등)의 최소 요구 사양 분석 - 재귀 함수 설계 시 컴파일 타임에 termination proof를 강제하는 제약 조건 도입 고려