
Zig 0.17 發布:建置系統重新設計,增量編譯預期全面可用
Zig 官方發布 0.17.0 版本。官方在發布說明中指出,這一版包含 5 個月的工作,來自 206 位不同貢獻者,共 925 次提交。[1]
本版重點
官方指出,這個開發週期原本預期較短,最終內容卻相當可觀:建置系統經過重新設計,包含引入 Build Server Protocol;ELF 連結器也加強到官方預期「x86_64-linux 上所有的人都可以使用增量編譯」的程度。[1]
語言面改動
官方公開的語言改動包含多項語法與行為調整:語法改為正式規範化並加入模稜測試;C 語言翻譯功能移至外部套件;新增 @backingInt 與 @fromBackingInt;新增 @SpirvType;移除雜列乘法語法;新增 @divCeil;@hasDecl 改為只對公開宣告回傳真;允許對 comptime 長度切片的雜列指標進行解引用與強制轉換。[1]
此外,官方移除 void{} 語法、移除 errdefer 的捕獲、移除 i0,以及移除 internal 與 link_once 全域連結性;@bitCast 的行為也有變動。[1]
標準庫與工具鏈
標準庫方面的改動包含:引入 SafeAllocator;StackFallbackAllocator 經重新設計並改名;ArrayList 加入指標釘定性宣告;debug.SafetyLock 支援共享鎖定;fmt.allocPrint 移至 mem.Allocator;格式化輸出增強;std.zon.parse 重新設計;bit_set 各種峰改名並檔案管理版本;std.lang.Type 改用結構雜列風格;lang.OptimizeMode 改名為 lang.Optimize,並加入 lang.Optimize.runtimeSafety。[1]
工具鏈方面,建置系統的改動包含把 Maker 程式與 Configurer 程式分離、快取系統重新設計、引入「configure cache poisoning」概念,以及 findProgram、findProgramLazy、執行步驟的 passthru 參數、fmt 步驟選項等變更。編譯器方面除增量編譯外,還涵蓋 SPIR-V、aarch64、loongarch 與 WebAssembly 後端;連結器部份涵蓋 ELF 與 COFF,並新增連結器測試框架。[1]
專業資助
官方指出,Zig 的開發由 Zig Software Foundation 資助,其組織是美國 501(c)(3) 非營利機構;官方呼籲社群考慮定期捐款,並表示這是最直接加速專業債 Roadmap 走向 1.0 的方式。官方也特別鳴謝 TigerBeetle、Synadia Communications 與 ZML 的重大貢獻。[1][2]
參考資料
[1] Zig 官方 — 0.17.0 Release Notes
[2] Zig 官方 — 下載與文件頁