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