Zig 0.16.0 릴리스에서 새로운 ELF 링커가 도입되어 초기 단계 지원을 시작함
점진적 컴파일(Incremental Compilation) 기능이 LLVM 백엔드 및 외부 라이브러리 연동 시에도 성능 저하 없이 지원됨
빌드 시스템 리팩토링으로 빌드 속도가 3배 이상 향상되었으며, 캐싱 메커니즘이 강화됨
Windows API 호출 시 커널32.dll 대신 ntdll.dll을 직접 사용하여 성능 및 안정성 개선
Zig 0.16.0에 도입된 새로운 ELF 링커는 초기에는 Zig 코드만 지원했으나, 최근 업데이트로 LLVM 및 LLD 라이브러리를 포함한 복잡한 빌드도 성능 저하 없이 지원하게 되었다. 특히 점진적 재빌드(Incremental Rebuilds) 시 외부 라이브러리 연동에도 추가적인 성능 오버헤드가 없다는 점이 주목할 만하다. 이는 개발 과정에서 수 밀리초(milliseconds) 단위의 빠른 피드백 루프를 가능하게 하여 개발 생산성을 크게 향상시킬 것으로 기대된다.
Andrew Kelley가 주도한 빌드 시스템 리팩토링은 하고, 하는 방식으로 변경되었다. 이로 인해 빌드 속도가 되었으며, `zig build --help` 명령어 응답 시간도 150ms에서 14.3ms로 단축되었다. 또한, 인자를 변경하거나, 변경 사항이 없을 경우 빌드 로직 실행을 건너뛰는 등 최적화가 이루어졌다.
Zig 표준 라이브러리는 Windows API 호출 시 커널32.dll 대신 ntdll.dll을 직접 사용하도록 변경되었다. 이는 커널32.dll의 불필요한 힙 할당(Heap Allocations), 추가적인 실패 모드, CPU 사용량 증가 등의 단점을 회피하기 위함이다. 예를 들어, 난수 생성 시 bcryptprimitives.dll 의존성을 제거하고, `NtReadFile`과 `NtWriteFile`을 직접 호출하여 오버랩된 I/O(Overlapped I/O) 처리를 위한 추가 리소스 관리를 줄였다.
Zig은 libc 함수들을 Zig 표준 라이브러리 래퍼로 통합하는 작업을 진행 중이며, 이를 통해 250개 이상의 C 소스 파일을 제거했다. 이 통합은 컴파일 속도 향상, 설치 크기 감소, 바이너리 크기 최적화에 기여한다. 또한, 패키지 의존성을 프로젝트 루트의 zig-pkg 디렉토리에 로컬로 저장하고, 전역 캐시를 압축하여 관리하는 방식으로 변경되었다. `--fork` 플래그를 통해 외부 의존성 포크(fork)를 쉽게 적용할 수 있게 되어 생태계 브레이크를 해결하는 데 도움을 준다.
Zig 0.16.0 릴리스를 앞두고 io_uring 및 Grand Central Dispatch(GCD) 기반의 std.Io.Evented 구현이 추가되었다. 이는 사용자 공간 스택 스위칭(Userspace Stack Switching)을 활용하며, 실험적인 단계이지만 I/O 구현을 쉽게 교체할 수 있는 가능성을 보여준다. 컴파일러 자체는 이 기능을 잘 지원하지만, 이벤트 기반 I/O 사용 시 성능 저하에 대한 진단이 필요한 상황이다.