Zig Devlog 2026 深度閱讀筆記

本篇文章更新時間: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_uringGCD(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 變成一個更強健、更一致、更可靠語言的基石。我會持續關注後續的發展。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon