Zig, LLVM 증분 컴파일로 빌드 속도 UP!
Zig 언어, LLVM 기반 증분 컴파일(Incremental Compilation) 지원으로 컴파일 오류 시 즉각적인 피드백 제공
io_uring 및 Grand Central Dispatch를 활용한 std.Io 구현으로 I/O 성능 개선 시도
패키지 관리 워크플로우 개선: zig-pkg 디렉토리를 통한 의존성 관리 및 --fork 플래그 추가
Windows API(kernel32.dll) 호출 최소화를 통해 성능 및 안정성 향상, Zig 표준 라이브러리 정책 반영
LLVM 증분 컴파일(Incremental Compilation)의 효과
Zig 언어는 LLVM 백엔드에서 증분 컴파일(Incremental Compilation)을 지원하여 컴파일 시간을 단축한다. 특히, 컴파일 오류 발생 시 Zig 컴파일러 코드 실행 시간을 최소화하여 개발자가 오류를 빠르게 확인할 수 있도록 돕는다. 공식 벤치마크에 따르면, 증분 컴파일은 성공적인 빌드에서도 약간의 속도 향상을 제공하며, 0.16.0 릴리스에서 정식 지원될 예정이다.
std.Io 개선: io_uring 및 GCD 구현
Zig는 io_uring 및 Grand Central Dispatch(GCD)를 활용한 std.Io 구현을 통해 I/O 성능 향상을 시도한다. 이 구현은 사용자 공간 스택 스위칭(User-space stack switching)을 기반으로 하며, I/O 구현을 손쉽게 교체할 수 있도록 설계되었다. 하지만, 더 나은 오류 처리, 로깅 제거, 예상치 못한 성능 저하 진단 등 추가적인 작업이 필요하다.
패키지 관리 워크플로우 개선
Zig는 패키지 관리를 위해 두 가지 주요 변경 사항을 도입했다. 첫째, 패키지를 프로젝트 루트의 zig-pkg 디렉토리에 저장하여 오프라인 빌드 및 아카이브를 지원한다. 둘째, `--fork` 플래그를 추가하여 종속성 트리의 특정 프로젝트를 오버라이드할 수 있도록 했다. 이를 통해 개발자는 종속성 프로젝트의 소스 코드를 직접 수정하고, 테스트하며, 문제를 해결할 수 있다.
Windows API 호출 최적화
Zig는 Windows API 호출 시 kernel32.dll 대신 ntdll.dll의 네이티브 API를 선호하는 정책을 적용하여 성능을 개선한다. 특히, NtReadFile 및 NtWriteFile과 같은 저수준 API를 직접 사용함으로써 불필요한 리소스 할당 및 관리 오버헤드를 줄인다. 또한, Entropy를 얻기 위한 API 호출 시 발생하는 문제점을 해결하여 안정성을 높였다.