AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

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

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

作者 | Vladimir VivienYf228資訊網(wǎng)——每日最新資訊28at.com

編譯 | 如煙Yf228資訊網(wǎng)——每日最新資訊28at.com

出品 | 51CTO技術(shù)棧(微信號:blog51cto)Yf228資訊網(wǎng)——每日最新資訊28at.com

Zig 是一種比較新的編程語言,于 2016 年首次推出。Zig 社區(qū)將其描述為“一種用于維護(hù)穩(wěn)固的、可優(yōu)化和可重用軟件的通用編程語言”。Yf228資訊網(wǎng)——每日最新資訊28at.com

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

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

1、簡單

這兩種語言都采用了簡單的設(shè)計(jì)理念,執(zhí)行過程很順暢,大大提高了工作效率。Zig 不支持宏、預(yù)處理器或運(yùn)算符重載。Yf228資訊網(wǎng)——每日最新資訊28at.com

Go 是一種托管內(nèi)存語言,并且運(yùn)行時(shí)有特別的方法來處理內(nèi)存的分配 / 釋放。但 Zig 始終恪守“無隱藏控制流”的口號,沒有自動(dòng)內(nèi)存管理,而是提供 API,讓程序員通過其標(biāo)準(zhǔn)庫手動(dòng)管理內(nèi)存。Yf228資訊網(wǎng)——每日最新資訊28at.com

2、強(qiáng)類型

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

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

3、處理錯(cuò)誤

Zig 中的錯(cuò)誤處理效果非常好。它是 try-catch-exception 語義和 Go 錯(cuò)誤值之間的交叉。那么它是如何運(yùn)行的?Yf228資訊網(wǎng)——每日最新資訊28at.com

首先,所有 Zig 錯(cuò)誤都是必須分配和處理的值(否則將導(dǎo)致編譯時(shí)錯(cuò)誤)。Zig 錯(cuò)誤使用error這個(gè)關(guān)鍵字聲明為一組值:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

使用二進(jìn)制運(yùn)算符 !,可以將Zig錯(cuò)誤值與正常類型的值組合起來,形成可由函數(shù)返回的 Union 類型。Yf228資訊網(wǎng)——每日最新資訊28at.com

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

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

此外,Zig 用一個(gè)非常有意思的結(jié)構(gòu)來處理錯(cuò)誤。與其他語言中的異常處理類似,Zig 使用 catch 關(guān)鍵字將錯(cuò)誤處理代碼塊附加到函數(shù)調(diào)用中,如果返回錯(cuò)誤值,則該函數(shù)調(diào)用將被執(zhí)行,如下所示:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

Zig 還支持使用關(guān)鍵字 try 在調(diào)用堆棧中傳播錯(cuò)誤的機(jī)制。例如,addAll 的功能是如果返回或繼續(xù)執(zhí)行其他操作,下面的函數(shù)將返回錯(cuò)誤。Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

最后,Zig 可以使用 if-else-switch 來更精確地過濾和處理錯(cuò)誤結(jié)果:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

4、Zig測試

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

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

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

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

5、Zig運(yùn)行

與 go run 類似,Zig 提供了一個(gè)更便捷的 zig run 命令,結(jié)合了編譯和運(yùn)行 Zig 源代碼的步驟:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

6、延遲

與Go類似,Zig使用 defer 來簡化資源管理,以便在當(dāng)前執(zhí)行的范圍塊結(jié)束時(shí)執(zhí)行清理操作,例如釋放資源。Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

7、Comptime

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

通過comptime,Zig 可以在編譯時(shí)實(shí)現(xiàn)多種功能:Yf228資訊網(wǎng)——每日最新資訊28at.com

  • 在編譯時(shí)解析的變量和表達(dá)式
  • 基于編譯時(shí)值運(yùn)行的函數(shù)
  • comptime 編譯期間選擇性執(zhí)行的代碼塊
  • 編譯時(shí)執(zhí)行的元編程

8、通用性

當(dāng)然,Zig 編譯時(shí)可編程性帶來結(jié)果是泛型類型和數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。在 Zig 中,comptime 提供對可作為常規(guī)數(shù)據(jù)值存儲和傳遞的類型值的訪問。Yf228資訊網(wǎng)——每日最新資訊28at.com

這使得創(chuàng)建采用類型參數(shù)的函數(shù)成為可能,如下所示:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

由于 comptime 類型值被視為任何類型,因此 Zig 允許使用它們構(gòu)建通用數(shù)據(jù)結(jié)構(gòu)。例如,MakeList 使用 comptime 類型信息返回在編譯時(shí)構(gòu)建的結(jié)構(gòu):Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

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

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

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

Zig 可以使用以下命令將源代碼編譯為可執(zhí)行二進(jìn)制文件:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

10、Zig 和 C 交叉編譯

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

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

11、Zig 和 CGo 交叉編譯

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

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

我們用Go來調(diào)用它:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

假設(shè)在 MacOS 構(gòu)建代碼,我們可以通過命令 zig cc 來使用 Zig 的 C 編譯器,將 C 代碼交叉編譯為鏈接到 Go 對象文件的目標(biāo)文件,從而為在 x86 架構(gòu)上運(yùn)行的 Linux 構(gòu)建靜態(tài)二進(jìn)制文件:Yf228資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Yf228資訊網(wǎng)——每日最新資訊28at.com

要實(shí)現(xiàn)此功能,你只需在工作站上安裝 Zig 工具鏈,無需其他輔助工具。Yf228資訊網(wǎng)——每日最新資訊28at.com

雖然這看起來沒什么大不了的,但請記住,交叉編譯支持 CGo 的靜態(tài)二進(jìn)制文件會(huì)更復(fù)雜(在不使用 Zig 的情況下)。通常需要幾個(gè)步驟來準(zhǔn)備構(gòu)建環(huán)境,其中包含交叉編譯目標(biāo)平臺所需的軟件包(請參閱此處)。Yf228資訊網(wǎng)——每日最新資訊28at.com

結(jié)論

Zig 夠簡單、夠強(qiáng)大、夠安全又兼?zhèn)?C 兼容性,備受開發(fā)人員青睞 。無論你是在為新項(xiàng)目尋找語言,還是只是想擴(kuò)展編程能力,Zig 都是值得探索的很棒的選擇。Yf228資訊網(wǎng)——每日最新資訊28at.com

參考鏈接:Yf228資訊網(wǎng)——每日最新資訊28at.com

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

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 構(gòu)建強(qiáng)大REST API的十個(gè)最佳實(shí)踐

下一篇: PyCharm編輯器結(jié)合Black插件,輕松實(shí)現(xiàn)Python代碼格式化

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價(jià)比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機(jī)潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲的機(jī)型了,另外部分中端機(jī)也取消了屏幕塑料支架
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營,這意味著騰訊音樂長音頻業(yè)務(wù)走向消亡。騰訊在長音頻領(lǐng)域還在摸索。為
  • 中國家電海外掘金正當(dāng)時(shí)|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財(cái)經(jīng)無忌7月16日晚,上海1862時(shí)尚藝術(shù)中心。伴隨著幻象的精準(zhǔn)命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊(duì)以絕對的優(yōu)勢戰(zhàn)勝了BLG戰(zhàn)隊(duì),拿下了總決
  • 馮提莫簽約抖音公會(huì) 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個(gè)名字,很多網(wǎng)友或許聽過,但應(yīng)該不記得她是哪位主播了。其實(shí),作為曾經(jīng)的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個(gè) 1。”這是2022年底,李彥宏
  • 三星Galaxy Z Fold/Flip 5國行售價(jià)曝光 :最低7499元/12999元起

    據(jù)官方此前宣布,三星將于7月26日也就是明天在韓國首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • DRAM存儲器10月價(jià)格下跌,NAND閃存本月價(jià)格與上月持平

    10月30日,據(jù)韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價(jià)格僅在本月就下跌了近 10%,此次是全年首次降價(jià),而NAND 閃存本月價(jià)格與上月持平。市
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風(fēng)扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報(bào)道,英特爾 Xe HPG Arc Alchemist 的正面實(shí)被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風(fēng)扇版本。另外,這款顯卡 PCB
Top