【開源資訊】Zig 0.6.0 發佈,想要挑戰 C 語言

Zig 0.6.0 已發佈,這是一門通用編程語言,專為穩定性、可維護性和性能而設計,追求替代 C 語言在系統編程上的最佳地位。Zig 具有以下值得關注的特性:

  • 手動管理內存
  • 與 C 語言競爭而非依賴它,Zig 標準庫不依賴於 libc
  • 輕量而簡單,專注於調試應用而不是調試編程語言的知識
  • 新的錯誤處理方法,與編寫良好的 C 語言錯誤處理類似,但減少了很多冗餘
  • 調試模式下優化了快速編譯時間,並在不確定行為發生時使用堆棧跟蹤崩潰
  • ReleaseFast 模式和 ReleaseSafe 模式
  • 泛型數據結構和函數
  • 通過協程實現併發
  • 導入 .h 頭文件並直接使用 C 語言的類型、變量和函數
  • 導出要依賴 C 語言代碼的函數,變量和類型,自動生成 .h 頭文件
  • 可選類型而非空指針
  • 交叉編譯是主要用例
【開源資訊】Zig 0.6.0 發佈,想要挑戰 C 語言

此版本的開發週期歷時 6 個月,有 122 名不同貢獻者提交了 2527 次 commit。

Zig 0.6.0 保持與 LLVM 一致的更新節奏,已將 LLVM 升級到最新版 LLVM 10,並且不再兼容 LLVM 9。新的 LLVM 版本主要是修復 Bug,尤其是對 ARM 支持、MIPS 支持、RISC-V 支持等方面的錯誤修復。

這也是第一個將 Zig 的所有補丁合併到上游的 LLD 版本。因此,Zig 的源碼庫中不再包含 LLD 源碼的 fork,也就意味著源碼的 tarball zig-0.6.0.tar.xz 比 zig-0.5.0.tar.xz 小了 0.5MiB,因為刪除 LLD 源碼比這個發佈週期中所有其他的改動加起來還節省了更多的空間。請注意,新的 Bootstrap Tarball 捆綁了 Zig 編譯器的所有依賴項,其中包括 LLVM、LLD 和 Clang。

語言特性層面的主要更新包括:

  • 類型強制語法(Type Coercion Syntax):類型強制(以前稱為"implicit casting")現在通過@as內置的方式來執行,而不是通過調用一個類型作為函數來執行。
  • Sentinel-Terminated 指針:通過這次修改,Zig 語言既增加了一項特性,同時也刪除了一項特性。不再有像c"hello"這樣的C語言字符串字面量。取而代之的是所有字符串字面量的類型從 []const u8 轉變為 *const [N:0]u8,其中 N 是字符串字面量的字節數。
  • 移除 Array-to-Reference 類型強制轉換
  • 數值比較:無論類型組合如何,所有數值都可進行比較。例如,小的有符號整數可以和大的無符號整數進行比較,而浮點數也可以和整數進行比較。
  • 匿名的結構體字面量(Anonymous Struct Literals):Zig 現在支持省略結構類型的字面量。
  • 增加 Tuples,刪除 Var Args:與匿名的枚舉字面量和匿名的結構體字面量類似,類型也可以從數組字面量中省略。
  • SIMD:對 SIMD 的支持還遠未完成,但已經取得重大進展。
  • 刪除 @newStackCall 方法:@newStackCall 最初用於研究安全遞歸,但現在安全遞歸計劃通過 Async 函數實現。
  • 非窮舉式枚舉:可以通過添加尾部的'_'字段來創建一個非窮舉式枚舉。它必須指定一個整數標記類型,並且不能消耗每個枚舉值。
  • Unicode 字符字面量:實現此功能是因為 Zig 被定義為使用 UTF-8 進行源碼編碼。一個 unicode 字符字面量是一個 comptime_int,其值等於編碼點。


分享到:


相關文章: