Zig 0.16.0 リリース
(ziglang.org)2026年4月14日に公開されました。244人のコントリビューターが8か月にわたって1,183件のコミットを積み重ねて作り上げたリリースです。
I/O as an Interface — 今回のリリースの中核
今回のリリースで最も大きな変更です。ファイルシステム、ネットワーキング、タイマー、同期化のように、ブロッキングが発生しうるほぼすべてのものを新しい std.Io インターフェースにまとめました。メモリ割り当て時に Allocator が必要なように、これからは I/O を使うコードはすべて Io インスタンスを受け取る必要があります。これにより、並行性モデルに依存せず再利用可能なパッケージを作れるようになり、イベントループも言語レベルで適切に扱えるようになりました。
実装は3種類あります:
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 をサポートするリンカー実装が主な目標です。
2件のコメント
昨晩、Zig Language Server も 0.16 がリリースされました。
言語本体が出てから数か月後にようやくランサブが出ることも多く、最新バージョンを使うのをためらうことがあったのですが、今回は本当にすぐに対応版が出ましたね。おかげでこの新バージョンをより早く簡単に使えるようになりました。
しまった、リンク……
https://github.com/zigtools/zls/releases