在這篇文章中,我將嘗試比較 GoLang、Zig 和 Rust。以及為什麼 Rust 贏得了這次比較(對我來說)。
我用 GoLang、Zig 和 Rust 寫了 3 個項目。這些項目足夠大,可以很好地了解語言基礎、缺點以及語言、框架或生態系統是否有問題。
提示:請隨意跳到 TLDR 部分以獲得該死的答案。
幾個月前我開始建立開發者工具,最初使用 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 等語言在您頭腦中產生的經典心理記憶模型相反。 必須在腦海中追蹤各個記憶體分配及其生命週期嗎?不用了,謝謝!
如果你是日常普通的後端工程師,並且喜歡計算他們的衝刺性能,那麼你最好的選擇可能是GoLang。
「但是我的公司不使用 GoLa—」
「離開公司,離開它,為工具使用正確的工作。離開公司。」
對我來說,GoLang 就像一場包辦婚姻,你內心永遠不會感到那種匆忙,但它永遠不會讓你失望,它是你的生死攸關的伴侶,你可以把你的一生都押在它上面它。
但是我的朋友,如果您正在尋找那種高峰,請繼續閱讀!
但是我想要那種衝動…我想要看到他們的眼睛語法時我的心就會爆炸…當我和他們在一起時,我想要感覺自己在天堂見鬼,當我不.. .
讓我們快速看一下 Rust 中多執行緒安全的範例。
我們有一個堆分配的值,並且有 10 個執行緒嘗試獨立修改它。
此程式碼不安全地存取計數器變量,因為所有執行緒都會嘗試同時修改計數器。
在其他語言中,類似的程式碼會愉快地編譯和運行。
如果您以前在多執行緒環境中工作過,您的第一個想法可能是使用「互斥體」來防止更新計數器變數時的競爭條件。
但是由於人為錯誤,在大型程式碼庫中很容易錯過這樣的小事。
Rust 甚至不允許這個程式編譯。
由於所有權和借用規則,編譯器將檢測到您在for 循環的第一次迭代中的第一個線程中可變地借用計數器...到目前為止還好. ..第二次迭代還想可變地並行借櫃檯? 不安全!引發編譯時錯誤! ! 。
出於變異/修改的目的而從其所有者處引用或「借用」值稱為「可變借用」
在這種情況下,其他語言根本不會給你任何錯誤。檢查正確性是你的責任,Rust 會阻止這種情況發生。
像這樣在語言中傳播的結構可以幫助你避免搬起石頭砸自己的腳(經常)。
這要看情況!
我真的希望有一種語言能夠答案,即使 GoLang 非常接近這個目標,它實際上取決於您的用例,最重要的是您的團隊。
對我來說,與 Rust 合作很愉快(現在,誰知道呢......呵呵)
TigerBeetle 的人們在 Zig 上嘗試了一次機會,他們對此很滿意。
Primeagen 對 Zig 更滿意。
對 Jarred Sumner 來說,Zig 很好,他用 Zig 寫了 Bun。
Mitchell Hashimoto(HashiCorp 背後的人)正在 Zig 中書寫幽靈,這是一個速度極快的術語 —
.
.
.
等等...
以上是我嘗試了所有熱門程式語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!