1P by bus710 3시간전 | ★ favorite | 댓글 2개

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 — Linux io_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 안에 포인터를 넣을 수 없게 됐습니다
  • posixos.windows 관련 API가 많이 제거됐습니다

표준 라이브러리

  • heap.ArenaAllocator 가 스레드 안전 + 락 프리로 바뀌었고, heap.ThreadSafe Allocator는 제거됐습니다
  • 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을 지원하는 링커 구현이 주요 목표입니다.

간밤에 Zig Language Server도 0.16이 릴리즈 되었습니다.

언어 나온 후 몇 달 후에야 랭섭이 나온 경우가 많아서 최신 버전 쓰기가 꺼려지곤 했는데, 이번엔 정말 빨리 맞춤 버전이 나왔네요. 덕분에 이 새 버전을 더 빠르고 쉽게 사용할 수 있게 되었습니다.