Zig 0.16.0 릴리즈
(ziglang.org)Zig 0.16.0 릴리즈
2026년 4월 14일에 공개됐습니다. 244명의 기여자가 8개월 동안 1,183개의 커밋을 쌓아서 만든 릴리즈입니다.
I/O as an Interface — 이번 릴리즈의 핵심
이번 릴리즈에서 가장 큰 변화입니다. 파일시스템, 네트워킹, 타이머, 동기화처럼 블로킹이 생길 수 있는 거의 모든 것을 새로운 std.Io 인터페이스로 묶었습니다. 메모리 할당할 때 Allocator가 필요한 것처럼, 이제 I/O를 쓰는 코드는 모두 Io 인스턴스를 받아야 합니다. 덕분에 동시성 모델에 상관없이 재사용 가능한 패키지를 만들 수 있고, 이벤트 루프도 언어 차원에서 제대로 다룰 수 있게 됐습니다.
구현체는 세 가지가 있습니다:
Io.Threaded— 스레드 기반의 완성된 구현체입니다. Cancellation도 지원하고, 0.15.x에서 넘어올 때 동작이 그대로 유지됩니다Io.Evented— 유저스페이스 스택 스위칭(그린 스레드) 방식의 실험적 구현체입니다Io.Uring— Linuxio_uring기반의 PoC 구현체입니다
컴파일러
- LLVM 백엔드에서도 Incremental Compilation이 됩니다 — 컴파일 에러가 있으면 LLVM Emit Object 단계를 건너뛰기 때문에 에러를 훨씬 빠르게 확인할 수 있습니다
- 타입 해석(Type Resolution)을 싹 갈아엎었습니다 — 내부 의존성 그래프가 순환 구조에서 DAG로 바뀌었습니다. 네임스페이스로만 쓰이는 타입은 불필요한 분석을 안 하게 돼서 바이너리 크기도 줄어듭니다. 의존성 루프 에러 메시지도 어디서 꼬였는지 훨씬 잘 보여줍니다
- aarch64 백엔드 — Debug 모드 기본값으로 쓰는 걸 목표로 열심히 개발 중입니다
- 내장 Fuzzer가 더 강해졌습니다 — AST Smith 기반 멀티프로세스 퍼징, 무한 모드(Infinite Mode), 크래시 덤프 기능이 추가됐습니다
언어 변경 (Breaking Changes)
마이그레이션이 필요한 변경사항들입니다:
@cImport가 빌드 시스템으로 옮겨갔습니다@Type빌틴이 없어졌습니다 — 타입별 개별 빌틴으로 대체됐습니다- Lazy Field Analysis가 생겼습니다 — 네임스페이스로만 쓰이는 타입은 필드 분석을 안 합니다
- packed union/struct 안에 포인터를 넣을 수 없게 됐습니다
posix및os.windows관련 API가 많이 제거됐습니다
표준 라이브러리
heap.ArenaAllocator가 스레드 안전 + 락 프리로 바뀌었고,heap.ThreadSafeAllocator는 제거됐습니다- Deflate 압축이 추가됐고, 압축 해제 API도 더 단순해졌습니다
std.crypto에 AES-SIV, AES-GCM-SIV, Ascon-AEAD, Ascon-Hash가 추가됐습니다Thread.Pool,GenericReader/AnyReader/FixedBufferStream이 제거됐습니다- Windows 네트워킹이
ws2_32.dll없이도 동작하고, NtDll 마이그레이션도 완료됐습니다
툴체인 업데이트
LLVM 21, musl 1.2.5, glibc 2.43, Linux 6.19 헤더, macOS 26.4 헤더, FreeBSD 15.0 libc로 올라갔습니다.
다음 릴리즈 (0.17.0) 방향
async I/O 안정화, aarch64 백엔드의 Debug 모드 기본값 전환, LLD 의존성 제거, Incremental Compilation을 지원하는 링커 구현이 주요 목표입니다.