在這篇文章中,我將嘗試比較 GoLang、Zig 和 Rust。以及為什麼 Rust 贏得了這次比較(對我來說)。
故事時間!
我用 GoLang、Zig 和 Rust 寫了 3 個項目。這些項目足夠大,可以很好地了解語言基礎、缺點以及語言、框架或生態系統是否有問題。
提示:請隨意跳到 TLDR 部分以獲得該死的答案。
Go語言
幾個月前我開始建立開發者工具,最初使用 GoLang。
第一個是基本的資料庫管理和遷移實用程式 (dbdaddy),我真的很喜歡使用 GoLang。
儘管這是我第一次嘗試用GoLang 構建比Advent Of Code 和10 億行挑戰問題更嚴重的東西,我很驚訝我花了不到一周的時間就精通了它 .
之字形
一直以來,我都在和 Zig 一起玩(沒什麼太嚴重的)。我聽說 Redis 將其許可證更改為“技術上非開源”許可證。
我心想:在 zig 中建立一個新的開源 Redis 有多難?
快轉 2 個月後:該死。
「GbCache」背後的基本思想是基於 LRU 的記憶體緩存,但實際的事實來源是保存在磁碟上,以及諸如引起的特定鍵/值更改的通知以及分配給鍵的 TTL 之類的功能。
Zig 的明確性令人印象深刻,這使得它變得更加簡單且更容易使用。
我從「如果明天要使用 HyperScale™,它能處理負載嗎?」的角度啟動了 GbCache
這個觀點驅使我排除了 GoLang,因為如果我無法極其確定地推理記憶體分配,我將無法完全控制速度。
從這個角度做事是一次非常好的學習經歷,因為突然你開始看到程式中所有可能崩潰、耗盡記憶體或可能成為瓶頸的點-程式碼中的熱路徑.
由於 Zig 的明確,我確定了我在何時何地分配記憶體。
但是... Zig 歸根結底並不是一種記憶安全的語言,而我是一個技能問題與珠穆朗瑪峰一樣大的人。
進入鐵鏽
在過去 2 年裡,我曾 3 次嘗試並憤怒地退出 Rust。來自 JavaScript 背景,我們的 macbook m69 maxes 中有大量 GB 內存,我從來沒有真正理解為什麼 Rust 有這些規則,並且從炒作的角度來看待它可能是一個糟糕的角度.
儘管我多次憤怒地退出,Rust 仍然在我的腦海中,它奇怪的語言、令人沮喪的內存規則和令人難以置信的生命週期。
但是在寫 Zig 時,有件事讓我受到了打擊...我已經在跟踪所有這些記憶規則和生命週期,但這是一種精神負擔。
我開始注意到 Zig 程式碼中的模式和樣板,試圖做 Rust 已經做的事情。
鏽
在為 SFS(SFW 名稱 - “簡單檔案儲存”)建立 CLI 用戶端時,我決定再次嘗試 Rust。
這次,在翻閱這本生鏽的書時,我開始感受到這一切的「原因」。
我喜歡 Rust 的最基本的一點是基於所有權和借用的記憶的心智模型。
儘管這種擁有和引用的記憶模型是虛構的,但它是一種方便推理的心智模型,並且在我的頭腦中產生的開銷更少。
與 C 和 Zig 等語言在您頭腦中產生的經典心理記憶模型相反。 必須在腦海中追蹤各個記憶體分配及其生命週期嗎?不用了,謝謝!
總長DR
Go語言
- 快(就像你的 5 個月活躍用戶會需要它一樣)
- 可靠
- 愚蠢的簡單,語言永遠不會成為你和你的目標之間的障礙
- 偉大的軟體包生態系統
之字形
- 速度極快
- 愚蠢的簡單
鏽
- 速度極快
- 可靠
- 偉大的軟體包生態系統
他們全部
- 驚人的錯誤處理
如果你是日常普通的後端工程師,並且喜歡計算他們的衝刺性能,那麼你最好的選擇可能是GoLang。
「但是我的公司不使用 GoLa—」
「離開公司,離開它,為工具使用正確的工作。離開公司。」
對我來說,GoLang 就像一場包辦婚姻,你內心永遠不會感到那種匆忙,但它永遠不會讓你失望,它是你的生死攸關的伴侶,你可以把你的一生都押在它上面它。
但是我的朋友,如果您正在尋找那種高峰,請繼續閱讀!
魯斯特普蘭
但是我想要那種衝動…我想要看到他們的眼睛語法時我的心就會爆炸…當我和他們在一起時,我想要感覺自己在天堂見鬼,當我不.. .
讓我們快速看一下 Rust 中多執行緒安全的範例。
我們有一個堆分配的值,並且有 10 個執行緒嘗試獨立修改它。
此程式碼不安全地存取計數器變量,因為所有執行緒都會嘗試同時修改計數器。
在其他語言中,類似的程式碼會愉快地編譯和運行。
如果您以前在多執行緒環境中工作過,您的第一個想法可能是使用「互斥體」來防止更新計數器變數時的競爭條件。
但是由於人為錯誤,在大型程式碼庫中很容易錯過這樣的小事。
Rust 甚至不允許這個程式編譯。
由於所有權和借用規則,編譯器將檢測到您在for 循環的第一次迭代中的第一個線程中可變地借用計數器...到目前為止還好. ..第二次迭代還想可變地並行借櫃檯? 不安全!引發編譯時錯誤! ! 。
出於變異/修改的目的而從其所有者處引用或「借用」值稱為「可變借用」
在這種情況下,其他語言根本不會給你任何錯誤。檢查正確性是你的責任,Rust 會阻止這種情況發生。
像這樣在語言中傳播的結構可以幫助你避免搬起石頭砸自己的腳(經常)。
結論
這要看情況!
我真的希望有一種語言能夠答案,即使 GoLang 非常接近這個目標,它實際上取決於您的用例,最重要的是您的團隊。
對我來說,與 Rust 合作很愉快(現在,誰知道呢......呵呵)
TigerBeetle 的人們在 Zig 上嘗試了一次機會,他們對此很滿意。
Primeagen 對 Zig 更滿意。
對 Jarred Sumner 來說,Zig 很好,他用 Zig 寫了 Bun。
Mitchell Hashimoto(HashiCorp 背後的人)正在 Zig 中書寫幽靈,這是一個速度極快的術語 —
.
.
.
等等...
以上是我嘗試了所有熱門程式語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文演示了創建模擬和存根進行單元測試。 它強調使用接口,提供模擬實現的示例,並討論最佳實踐,例如保持模擬集中並使用斷言庫。 文章

本文探討了GO的仿製藥自定義類型約束。 它詳細介紹了界面如何定義通用功能的最低類型要求,從而改善了類型的安全性和代碼可重複使用性。 本文還討論了局限性和最佳實踐

本文討論了GO的反思軟件包,用於運行時操作代碼,對序列化,通用編程等有益。它警告性能成本,例如較慢的執行和更高的內存使用,建議明智的使用和最佳

本文討論了GO中使用表驅動的測試,該方法使用測試用例表來測試具有多個輸入和結果的功能。它突出了諸如提高的可讀性,降低重複,可伸縮性,一致性和A

本文使用跟踪工具探討了GO應用程序執行流。 它討論了手冊和自動儀器技術,比較諸如Jaeger,Zipkin和Opentelemetry之類的工具,並突出顯示有效的數據可視化

本文討論了通過go.mod,涵蓋規範,更新和衝突解決方案管理GO模塊依賴關係。它強調了最佳實踐,例如語義版本控制和定期更新。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),