本篇文章更新時間:2026/02/15
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
Zig 2026 Devlog 精華筆記:從 I/O 革新、套件管理到 libc 重構的深度進化
編輯前言:這一篇 Devlog 集中展示了 Zig 在 2026 年初連續推出的幾項重磅進展。從 io_uring/GCD 支援、套件管理大改版,到持續推進的 zig libc 工程,我讀完的感覺是:Zig 正在把底層基礎建設打得越來越扎實,並一步步靠近「更簡潔、更高效、更可控」的願景。
文章來源: Devlog ⚡ Zig Programming Language
核心觀點 (Key Takeaways)
- Zig 的 std.Io 正式加入 io_uring 與 GCD(Grand Central Dispatch) 的 evented 實作,但目前仍屬實驗性。
- 套件管理出現兩個重大變化:
- 依賴檔案改存放於專案內的
zig-pkg目錄。 - 新增
zig build --fork,大幅改善處理 ecosystem breakage 的工作流程。 - Windows 平台持續朝「Prefer the Native API over Win32」前進,減少 kernel32.dll 的額外負擔與不穩定行為。
- zig libc 重構進展迅速,已刪除約 250 個 C source files,朝更輕量、可控的 libc 邁進。
深入解析
1. std.Io.Evented:io_uring 與 GCD 實作正式落地
Zig 的 vision 一直是讓 I/O 模式能夠自由切換,不管你使用 threaded、evented、或其他實作,應用程式的邏輯都能保持一致。這次的更新終於讓 io_uring 與 GCD 基於 "userspace stack switching"(fibers/green threads)方式可用。
原文強調了一個重要點:
Key point here being that the app function is identical between those two snippets.
這象徵 Zig 把 I/O 抽象層拉得更乾淨,讓使用者可以專注在 app 本身,不需要和 I/O 實作細節糾纏。
不過目前仍有幾個需要補完的面向,例如:
- 更好的錯誤處理
- 性能退化待診斷(特別是在 Zig compiler 上)
- 未實作的函式
- 需要更多測試
- 需要能查詢最大 stack size 的 builtin
換句話說,這功能已經能玩,但距離“穩定”還有一段路。
2. 套件管理:zig-pkg 與 --fork 的工作流程革命
這一段讓我眼睛一亮。
第一個變化:依賴改存放於 zig-pkg/。
以前所有 fetched packages 都塞在 .zig-cache 裡,現在改成:
- 專案本地:未壓縮、可直接編輯,方便 tinkering。
- 全域快取:壓縮 tar.gz,可跨電腦共享,未來可支援 P2P 傳輸。
原文指出:
By recompressing packages into a canonical form, this will allow peers to share Zig packages with minimal bandwidth.
簡單說,Zig 想把套件變成「可 torrent 的資源」。這個想法真的很 Zig:去中心化、離線友善、節省網路成本。
第二個變化:加入 zig build --fork。
這個設計十分優雅:當 ecosystem 壞掉時,你可以透過這個 flag 快速覆蓋整個 dependency tree 裡對某個套件的引用。
它的美妙之處在於:
- 不需要修改 build.zig.zon
- 不需要切換到 fork 的 repo
- CLI flag 用完即走,乾淨不留痕跡
而且原文講得很實在:
be selfish and just keep working on your own stuff, or … submit your patches upstream.
Zig 真的很懂開發者的生活現實。
3. Windows 平台:繞過 kernel32.dll,直接用 ntdll.dll
這部分非常底層,但也非常重要。核心精神是:
win32 API 很多地方太重、不穩、甚至會 heap allocate 或做奇怪的事;直接用 Native API 更乾淨有效率。
例如 SystemFunction036:
- 文檔說「永不失敗」但實際上會因 DLL loading fail 而失敗
- 初始化還會 heap allocate,甚至每次載入跑測試
- 本質只是從
\Device\CNG讀 48 bytes
Zig 選擇直接呼叫底層 API,避開這些不可預期的 overhead。
在 ReadFile/NtReadFile 的例子中也看出:
- kernel32.dll 提供 BOOL + GetLastError 的反直覺 API
- OVERLAPPED 根本是假的抽象
- Zig 改採 APC + NtDelayExecution,讓 cancelation 更一致
總結來說,Zig 正在讓 Windows I/O 變得可靠、精準,並去除 decades of cruft。
4. zig libc:刪除了 250 個 C source files,仍有 2032 個待移植
zig libc 的方向很明確:
- 用 Zig 重寫 libc wrapper
- 減少第三方 C 程式碼
- 加速 build,縮小 binary
- ZCU 整合讓跨 libc 邊界的最佳化成為可能(類似 LTO)
這段有一句我覺得很能代表 Zig 的哲學:
Zig gains independence from third party projects and from the C programming language.
也就是說 Zig 想要建立「更可控的底層」,不依賴其他 C 專案的品質或設計決策。
此外,Andrew 也提到一個潛在但尚未實作的可能性:
讓所有 libc I/O 都能被強制導向 io_uring event loop。
如果未來真的做出來,這代表:
- 即便你用第三方 C 程式碼
- Zig 也能把它的 read/write 帶入 evented I/O
這會是相當強大的能力。
筆者心得與啟發
這次 devlog 給我的最大感受是:Zig 正在全面打磨底層基礎,並且都是那種「短期麻煩、長期巨大收益」的工程。
幾點個人心得:
- std.Io 的統一性:我一直覺得 Zig 把 I/O 抽象做得非常漂亮,這次 io_uring/GCD evented 的出現,讓多種模式能真正 plug-and-play。
- 套件管理的可 tinkering 性:依賴明確存放在
zig-pkg/,這對喜歡挖依賴、改依賴的工程師是一大福音。 - Windows Native API 的堅持:Zig 對於「正確與高效」的堅持非常一致,即使要繞過 decades of legacy burden,也要讓 API 更乾淨。
- zig libc 的長期價值:減少 250 個 C source 是小步,但方向完全正確。未來某一天 Zig 完整掌握自己的 libc,性能與可控性都會大幅進步。
整體而言,Zig 在 2026 的開局非常紮實。這些更新看似底層、看似枯燥,但它們都是讓 Zig 變成一個更強健、更一致、更可靠語言的基石。我會持續關注後續的發展。
