日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

作為一名 Go 程序員,我為啥更喜歡用 Zig?

來源: 責編: 時間:2023-12-06 09:20:00 328觀看
導讀作者 | Vladimir Vivien編譯 | 如煙出品 | 51CTO技術棧(微信號:blog51cto)Zig 是一種比較新的編程語言,于 2016 年首次推出。Zig 社區將其描述為“一種用于維護穩固的、可優化和可重用軟件的通用編程語言”。看似一句簡單

作者 | Vladimir VivienPbr28資訊網——每日最新資訊28at.com

編譯 | 如煙Pbr28資訊網——每日最新資訊28at.com

出品 | 51CTO技術棧(微信號:blog51cto)Pbr28資訊網——每日最新資訊28at.com

Zig 是一種比較新的編程語言,于 2016 年首次推出。Zig 社區將其描述為“一種用于維護穩固的、可優化和可重用軟件的通用編程語言”。Pbr28資訊網——每日最新資訊28at.com

看似一句簡單的描述,卻隱藏著遠大的抱負。Zig被看作是可與C語言一較高下的編程語言。此外,Zig 也是一個編譯器工具鏈,可以作為現有 C 編譯器的替代品。Pbr28資訊網——每日最新資訊28at.com

作為一個使用 Go 的程序員,我發現 Zig 及其工具鏈提出的主張很有意思。我在研究 Zig 時,發現這兩種語言(Zig 和 Go)有一些共同之處。接下來,我將詳細介紹作為 Go 程序員,我覺得 Zig 有趣的功能。Pbr28資訊網——每日最新資訊28at.com

1、簡單

這兩種語言都采用了簡單的設計理念,執行過程很順暢,大大提高了工作效率。Zig 不支持宏、預處理器或運算符重載。Pbr28資訊網——每日最新資訊28at.com

Go 是一種托管內存語言,并且運行時有特別的方法來處理內存的分配 / 釋放。但 Zig 始終恪守“無隱藏控制流”的口號,沒有自動內存管理,而是提供 API,讓程序員通過其標準庫手動管理內存。Pbr28資訊網——每日最新資訊28at.com

2、強類型

作為一種為系統編程而設計的語言,Zig圍繞其類型系統提供了大量以安全性和C ABI兼容性為中心的特性。雖然我無法充分介紹所有內容,但可以提出一些你可能會感興趣的亮點:Pbr28資訊網——每日最新資訊28at.com

  • 有符號/無符號整數(預設大小從 8 位到 128 位)
  • 任意大小的有符號/無符號整數(即i77 位 int)
  • 浮點(從 16 位精度到 128 位精度)
  • 切片和數組(即 []u8{ ‘h’, ‘i’, ‘!’}或[4]i32{ 1, 2, 3, 4 })
  • UTF-8 編碼的字符串文字,存儲為以 null 結尾的字節數組
  • 具有 C ABI 兼容性的功能豐富的結構類型
  • 具有隱式/顯式序數值的枚舉和對方法的支持
  • 用于存儲多種類型選擇的值的聯合
  • 支持使用向量的并行運算
  • 傳統指針和帶有切片表達式的多項指針

3、處理錯誤

Zig 中的錯誤處理效果非常好。它是 try-catch-exception 語義和 Go 錯誤值之間的交叉。那么它是如何運行的?Pbr28資訊網——每日最新資訊28at.com

首先,所有 Zig 錯誤都是必須分配和處理的值(否則將導致編譯時錯誤)。Zig 錯誤使用error這個關鍵字聲明為一組值:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

使用二進制運算符 !,可以將Zig錯誤值與正常類型的值組合起來,形成可由函數返回的 Union 類型。Pbr28資訊網——每日最新資訊28at.com

例如,下面的函數可以返回類型為 error 或 u32 的值,返回類型為 !u32(或顯示為DigitError!u32):Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

此外,Zig 用一個非常有意思的結構來處理錯誤。與其他語言中的異常處理類似,Zig 使用 catch 關鍵字將錯誤處理代碼塊附加到函數調用中,如果返回錯誤值,則該函數調用將被執行,如下所示:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

Zig 還支持使用關鍵字 try 在調用堆棧中傳播錯誤的機制。例如,addAll 的功能是如果返回或繼續執行其他操作,下面的函數將返回錯誤。Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

最后,Zig 可以使用 if-else-switch 來更精確地過濾和處理錯誤結果:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

4、Zig測試

在 Zig 中,源代碼測試是一流的組成部分,在該語言中擁有自己的test關鍵字。測試的聲明方式與頂級函數類似,使用 test 關鍵字,后跟描述和代碼塊:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

與go test一樣,工具鏈附帶了zig test命令,用于在源代碼中執行測試:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

5、Zig運行

與 go run 類似,Zig 提供了一個更便捷的 zig run 命令,結合了編譯和運行 Zig 源代碼的步驟:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

6、延遲

與Go類似,Zig使用 defer 來簡化資源管理,以便在當前執行的范圍塊結束時執行清理操作,例如釋放資源。Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

7、Comptime

comptime是該語言中另一個有趣的概念,在大多數其他語言中都沒有。Zig 沒有單獨的元語言或宏系統。但Zig 提供了一種巧妙的解決方案,使用comptime(或編譯時)的概念將其源代碼的可編程性擴展到編譯階段。Pbr28資訊網——每日最新資訊28at.com

通過comptime,Zig 可以在編譯時實現多種功能:Pbr28資訊網——每日最新資訊28at.com

  • 在編譯時解析的變量和表達式
  • 基于編譯時值運行的函數
  • comptime 編譯期間選擇性執行的代碼塊
  • 編譯時執行的元編程

8、通用性

當然,Zig 編譯時可編程性帶來結果是泛型類型和數據結構的實現。在 Zig 中,comptime 提供對可作為常規數據值存儲和傳遞的類型值的訪問。Pbr28資訊網——每日最新資訊28at.com

這使得創建采用類型參數的函數成為可能,如下所示:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

由于 comptime 類型值被視為任何類型,因此 Zig 允許使用它們構建通用數據結構。例如,MakeList 使用 comptime 類型信息返回在編譯時構建的結構:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

9、Zig可作為C(交叉)編譯器

Zig 工具鏈具有全功能 C 編譯器,這意味著你可以使用 Zig 來替代當前的 C 編譯器工具鏈。給出以下 hello.c 源代碼文件:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

Zig 可以使用以下命令將源代碼編譯為可執行二進制文件:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

10、Zig 和 C 交叉編譯

Zig 可以輕松交叉編譯代碼(無論是 C 還是 Zig),并且匯集了所有必要的工具和庫,以確保你可以針對其支持的任何架構。Pbr28資訊網——每日最新資訊28at.com

例如,Zig 可以將之前的 C 源代碼交叉編譯為針對 linux 的靜態二進制文件(使用 musl):Pbr28資訊網——每日最新資訊28at.com

11、Zig 和 CGo 交叉編譯

事實證明,Zig 的C交叉編譯支持對于交叉編譯支持Go的Go源代碼非常有用。例如,在 add.c 中添加以下 C 函數:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

我們用Go來調用它:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

假設在 MacOS 構建代碼,我們可以通過命令 zig cc 來使用 Zig 的 C 編譯器,將 C 代碼交叉編譯為鏈接到 Go 對象文件的目標文件,從而為在 x86 架構上運行的 Linux 構建靜態二進制文件:Pbr28資訊網——每日最新資訊28at.com

圖片圖片Pbr28資訊網——每日最新資訊28at.com

要實現此功能,你只需在工作站上安裝 Zig 工具鏈,無需其他輔助工具。Pbr28資訊網——每日最新資訊28at.com

雖然這看起來沒什么大不了的,但請記住,交叉編譯支持 CGo 的靜態二進制文件會更復雜(在不使用 Zig 的情況下)。通常需要幾個步驟來準備構建環境,其中包含交叉編譯目標平臺所需的軟件包(請參閱此處)。Pbr28資訊網——每日最新資訊28at.com

結論

Zig 夠簡單、夠強大、夠安全又兼備 C 兼容性,備受開發人員青睞 。無論你是在為新項目尋找語言,還是只是想擴展編程能力,Zig 都是值得探索的很棒的選擇。Pbr28資訊網——每日最新資訊28at.com

參考鏈接:Pbr28資訊網——每日最新資訊28at.com

https://medium.com/@vladimirvivien/things-i-like-about-zig-as-a-go-programmer-75eb02aab00fPbr28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-38525-0.html作為一名 Go 程序員,我為啥更喜歡用 Zig?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 構建強大REST API的十個最佳實踐

下一篇: PyCharm編輯器結合Black插件,輕松實現Python代碼格式化

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 28個SpringBoot項目中常用注解,日常開發、求職面試不再懵圈

    前言在使用SpringBoot開發中或者在求職面試中都會使用到很多注解或者問到注解相關的知識。本文主要對一些常用的注解進行了總結,同時也會舉出具體例子,供大家學習和參考。注解
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、“Ringdoll戒之人形”淘寶店鋪有關外貌的評價,黃山已經聽累了。生于1985年的他,哪
  • 聯想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯想小新Pad Pro 12.6將于秋季新品會上推出,官方按照慣例直接在發布會前給出了機型的所有參數。聯想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
Top 主站蜘蛛池模板: 高阳县| 荃湾区| 杂多县| 呼玛县| 九江县| 隆回县| 宁乡县| 九龙城区| 秀山| 陆河县| 望城县| 当阳市| 红河县| 襄汾县| 宜阳县| 天气| 仙桃市| 平阳县| 海盐县| 永宁县| 临泽县| 芜湖县| 浑源县| 江津市| 莎车县| 略阳县| 樟树市| 张家川| 克什克腾旗| 固安县| 淮阳县| 稷山县| 搜索| 迭部县| 漾濞| 文安县| 通山县| 辛集市| 嘉祥县| 绥江县| 合水县|