Zig 0.5.0 發佈了。
Zig 是一門通用編程語言,專為穩定性、可維護性和性能而設計,追求替代 C 語言在系統編程上的最佳地位。Zig 具有以下值得關注的特性:
- 手動管理內存
- 與 C 語言競爭而非依賴它,Zig 標準庫不依賴於 libc
- 輕量而簡單,專注於調試應用而不是調試編程語言的知識
- 新的錯誤處理方法,與編寫良好的 C 語言錯誤處理類似,但減少了很多冗餘
- 調試模式下優化了快速編譯時間,並在不確定行為發生時使用堆棧跟蹤崩潰
- ReleaseFast 模式和 ReleaseSafe 模式
- 泛型數據結構和函數
- 通過協程實現併發
- 導入 .h 頭文件並直接使用 C 語言的類型、變量和函數
- 導出要依賴 C 語言代碼的函數,變量和類型,自動生成 .h 頭文件
- 可選類型而非空指針
- 交叉編譯是主要用例
0.5.0 版本經過 6 個月打磨,包括了 1541 次 commit,帶來了許多新的內容。
Zig 跟隨 LLVM 的步伐,前幾天 LLVM 9 發佈了,所以 Zig 目前升級到了 LLVM 9,不再兼容 LLVM 8。值得注意的是,這意味著 Zig 現在支持 RISC-V。同時 Zig 還可以以 Emscripten 為編譯目標操作系統。Emscripten 是一個獨特的 LLVM 後端,它可以將 LLVM 字節碼編譯成 JavaScript(asm.js),往上追溯其實也就是通過 Clang 將 C 和 C++ 代碼編譯成 JavaScript(asm.js),可以大大簡化現有代碼在 Web 時代的重用。除了 asm.js,Emscripten 還支持 WebAssembly 這一更加先進的 Web 技術,通過與 asm.js 類似的機制,Emscripten 可以生成 WASM 二進制字節碼。
目前 Emscripten 還不能自託管,之後可行的情況下,可以使用 WebAssembly 將其作為瀏覽器中的 Zig 沙箱選項。
語言特性層面的主要更新包括:
- 切片類型不再具有字段訪問,而是使用@typeInfo(Slice).Pointer.child。
- 枚舉文字隱式 cast 為帶標記的 union。
- 允許將可選指針隱式 cast 為可選c_void指針。
- 添加了*[N]T隱式 cast 到[*c]T。
- anyerror不再作為關鍵字。
- @cmpxchgStrong 和 @cmpxchgWeak 現在在 x86_64 上支持 128 位整數。
- comptime_int現在隱式 cast 為comptime_float。
- @typeOf 現在保證沒有運行時副作用。
- noinline函數聲明中添加了關鍵字。
- 現在可以比較並集標記和枚舉文字。
- 單元素enum默認設置為u0,comptime_int仍允許作為顯式枚舉標籤類型。
完整更新內容查看發佈公告:
https://ziglang.org/download/0.5.0/release-notes.html
文章轉載自 OSCHINA 社區 [http://www.oschina.net]
本文標題:Zig 0.5.0 發佈,想要替換 C 的編程語言
本文地址:https://www.oschina.net/news/110270/zig-0-5-0-released
閱讀更多 達升笑聊IT 的文章