컴파일러 타입 분석(Type Resolution) 로직 재설계를 통해 컴파일 속도 향상 및 오류 메시지 개선
io_uring 및 Grand Central Dispatch 기반의 I/O 구현으로 비동기 프로그래밍 지원
패키지 관리 워크플로우 개선: zig-pkg 디렉토리를 통한 종속성 관리 및 --fork 플래그 추가
Windows API 활용 개선: kernel32.dll 대신 ntdll.dll 직접 호출하여 성능 및 안정성 확보
zig libc 프로젝트를 통해 C 라이브러리 종속성 제거 및 컴파일 속도 향상
Zig 컴파일러는 타입 분석 로직을 재설계하여 컴파일 속도와 오류 메시지 가독성을 향상시켰다. 특히, 초기화되지 않은 타입 필드 분석을 지연시켜 컴파일 시간(Compile Time)을 단축하고, 종속성 루프(Dependency Loop) 발생 시 상세한 오류 정보를 제공한다. 이러한 개선은 모던 Zig에서 흔히 사용되는 네임스페이스(Namespace) 패턴의 효율성을 높이고, 개발자가 컴파일 오류(Compile Error)를 보다 쉽게 해결하도록 돕는다.
Zig는 io_uring과 Grand Central Dispatch(GCD)를 활용한 I/O 구현을 실험적으로 도입했다. 이들은 사용자 공간 스택 스위칭(Userspace Stack Switching)을 기반으로 하며, I/O 작업을 비동기적으로 처리하여 성능을 향상시킨다. 하지만, 아직 , 로깅 제거, 성능 저하 문제 등 해결해야 할 과제가 남아있다. 이러한 개선은 Zig 코드에서 I/O 구현을 쉽게 교체할 수 있도록 하여 유연성을 높인다.
Zig는 패키지 관리를 위해 zig-pkg 디렉토리를 도입하여 프로젝트 종속성을 관리하고, --fork 플래그를 추가하여 종속성 프로젝트를 오버라이드(Override)할 수 있도록 했다. zig-pkg 디렉토리는 프로젝트 루트에 위치하며, 프로젝트별 종속성을 저장하여 오프라인 빌드 및 아카이빙을 지원한다. --fork 플래그는 특정 종속성을 개발 환경에서 쉽게 수정하고 테스트할 수 있도록 돕는 기능으로, 에코시스템(Ecosystem) 문제 발생 시 유연하게 대처할 수 있도록 한다.
Zig는 Windows API 호출 시 kernel32.dll의 래퍼(Wrapper) 대신, 하위 레벨 API인 ntdll.dll을 직접 호출하여 성능을 개선하고 있다. kernel32.dll은 불필요한 힙 할당, 추가적인 오류 발생 가능성, 의도하지 않은 CPU 사용량 증가 등의 문제를 야기한다. 특히, 랜덤 바이트(Random Bytes) 생성과 파일 I/O(File I/O) 관련 API에서 ntdll.dll을 직접 호출함으로써 성능 향상을 이끌어냈다.
Zig는 zig libc 프로젝트를 통해 C 라이브러리 기능을 Zig 표준 라이브러리 래퍼로 제공하여 C 라이브러리 종속성을 줄이고 있다. 이로 인해 컴파일 속도 향상, Zig 설치 크기 감소, 그리고 정적 링크된 사용자 애플리케이션의 바이너리 크기 감소를 기대할 수 있다. 또한, Zig 컴파일 유닛(Compilation Unit)을 공유하여 LTO(Link-Time Optimization)와 유사한 최적화를 가능하게 한다. 이는 I/O 제어 및 리소스 누수 감지와 같은 추가적인 기능을 가능하게 할 수 있다.