Zig, 타입 시스템 개편과 함께 언어 안정성 논쟁!
Zig 언어의 타입 시스템 재설계(Type Resolution Redesign)를 통해 컴파일러 내부 로직을 개선하고, 의존성 루프(Dependency Loop) 관련 에러 메시지를 개선함
io_uring 및 Grand Central Dispatch 구현을 통해 I/O 성능 향상을 시도했으나, 성능 저하 문제로 인해 실험적인 단계에 머무름
패키지 관리 워크플로우 개선을 통해 로컬 패키지 저장(Local Package Storage) 및 --fork 플래그(Flag)를 도입하여 개발 편의성을 증대함
윈도우 API(Windows API) 사용 시 kernel32.dll을 우회(Bypassing)하고 ntdll.dll을 직접 호출하여 성능 및 안정성을 확보하려는 시도
Zig 컴파일러 내부 구조 개선
이번 타입 시스템 재설계를 통해 Zig 컴파일러는 타입 필드 분석(Type Field Analysis)을 지연시켜 불필요한 연산을 줄였다. 특히, 네임스페이스(Namespace)로 사용되는 타입의 경우, 초기화되지 않으면 컴파일러가 해당 타입의 내부 구조를 분석하지 않도록 변경했다. 또한, 의존성 루프(Dependency Loop) 발생 시 상세한 에러 메시지를 제공하여 디버깅 편의성을 높였다. 이러한 변경은 컴파일러 성능 향상에 기여한다.
io_uring 및 GCD 기반 I/O 구현
Zig은 io_uring 및 Grand Central Dispatch(GCD)를 활용한 I/O 구현을 실험적으로 도입했다. 이 기술들은 사용자 공간 스택 전환(Userspace Stack Switching)을 기반으로 하며, I/O 작업의 비동기 처리를 지원한다. 하지만, 아직 오류 처리(Error Handling), 로깅 제거(Remove Logging), 성능 저하 문제 등 해결해야 할 과제가 남아있다. I/O 구현을 쉽게 교체할 수 있도록 하는 것이 목표이다.
패키지 관리 시스템 개선
Zig은 패키지 관리 시스템을 개선하여 개발 편의성을 높였다. 프로젝트 루트 디렉토리에 zig-pkg 디렉토리(Directory)를 생성하여 패키지를 로컬에 저장하고, --fork 플래그를 통해 종속성 프로젝트를 오버라이드(Override)할 수 있도록 했다. 이를 통해 개발자는 종속성 문제를 해결하고, 개선된 워크플로우(Improved Workflow)를 통해 개발 생산성을 향상시킬 수 있다. 또한, 향후 P2P 기반 패키지 공유를 지원할 예정이다.
윈도우 API(Windows API) 사용 최적화
Zig은 윈도우 API 사용 시 kernel32.dll을 우회(Bypassing)하고 ntdll.dll을 직접 호출하는 방식을 선호한다. 이는 kernel32.dll이 불필요한 힙 할당(Heap Allocation)과 추가적인 오류 발생 가능성을 내포하기 때문이다. 특히, 난수 생성(Random Number Generation)과 파일 I/O(File I/O) 관련 API에서 이러한 최적화를 통해 성능을 개선하고, 불필요한 리소스 사용을 줄였다.