搜尋
首頁後端開發Golang我嘗試了所有熱門程式語言

在這篇文章中,我將嘗試比較 GoLang、Zig 和 Rust。以及為什麼 Rust 贏得了這次比較(對我來說)。

故事時間!

我用 GoLang、Zig 和 Rust 寫了 3 個項目。這些項目足夠大,可以很好地了解語言基礎、缺點以及語言、框架或生態系統是否有問題。

提示:請隨意跳到 TLDR 部分以獲得該死的答案。

Go語言

幾個月前我開始建立開發者工具,最初使用 GoLang。

第一個是基本的資料庫管理和遷移實用程式 (dbdaddy),我真的很喜歡使用 GoLang。

儘管這是我第一次嘗試用GoLang 構建比Advent Of Code 和10 億行挑戰問題更嚴重的東西,我很驚訝我花了不到一周的時間就精通了它 .

之字形

一直以來,我都在和 Zig 一起玩(沒什麼太嚴重的)。我聽說 Redis 將其許可證更改為“技術上非開源”許可證。

我心想:在 zig 中建立一個新的開源 Redis 有多難?

I Tried Every Hot Programming Language

快轉 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 就像一場包辦婚姻,你內心永遠不會感到那種匆忙,但它永遠不會讓你失望,它是你的生死攸關的伴侶,你可以把你的一生都押在它上面它。

但是我的朋友,如果您正在尋找那種高峰,請繼續閱讀!

魯斯特普蘭

但是我想要那種衝動…我想要看到他們的眼睛語法時我的心就會爆炸…當我和他們在一起時,我想要感覺自己在天堂見鬼,當我不.. .

I Tried Every Hot Programming Language

讓我們快速看一下 Rust 中多執行緒安全的範例。

我們有一個堆分配的值,並且有 10 個執行緒嘗試獨立修改它。

此程式碼不安全地存取計數器變量,因為所有執行緒都會嘗試同時修改計數器。

在其他語言中,類似的程式碼會愉快地編譯和運行。

如果您以前在多執行緒環境中工作過,您的第一個想法可能是使用「互斥體」來防止更新計數器變數時的競爭條件。

但是由於人為錯誤,在大型程式碼庫中很容易錯過這樣的小事。

Rust 甚至不允許這個程式編譯。

由於所有權和借用規則,編譯器將檢測到您在for 循環的第一次迭代中的第一個線程中可變地借用計數器...到目前為止還好. ..第二次迭代還想可變地並行借櫃檯? 不安全!引發編譯時錯誤! !

出於變異/修改的目的而從其所有者處引用或「借用」值稱為「可變借用」

在這種情況下,其他語言根本不會給你任何錯誤。檢查正確性是你的責任,Rust 會阻止這種情況發生。

像這樣在語言中傳播的結構可以幫助你避免搬起石頭砸自己的腳(經常)。

結論

這要看情況!

真的希望有一種語言能夠答案,即使 GoLang 非常接近這個目標,它實際上取決於您的用例,最重要的是您的團隊。

對我來說,與 Rust 合作很愉快(現在,誰知道呢......呵呵)

TigerBeetle 的人們在 Zig 上嘗試了一次機會,他們對此很滿意。

Primeagen 對 Zig 更滿意。

對 Jarred Sumner 來說,Zig 很好,他用 Zig 寫了 Bun。

Mitchell Hashimoto(HashiCorp 背後的人)正在 Zig 中書寫幽靈,這是一個速度極快的術語 —

.
.
.

等等...

以上是我嘗試了所有熱門程式語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何使用PPROF工具分析GO性能?您如何使用PPROF工具分析GO性能?Mar 21, 2025 pm 06:37 PM

本文解釋瞭如何使用PPROF工具來分析GO性能,包括啟用分析,收集數據並識別CPU和內存問題等常見的瓶頸。

您如何在GO中編寫單元測試?您如何在GO中編寫單元測試?Mar 21, 2025 pm 06:34 PM

本文討論了GO中的編寫單元測試,涵蓋了最佳實踐,模擬技術和有效測試管理的工具。

如何編寫模擬對象和存根以進行測試?如何編寫模擬對象和存根以進行測試?Mar 10, 2025 pm 05:38 PM

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

如何定義GO中仿製藥的自定義類型約束?如何定義GO中仿製藥的自定義類型約束?Mar 10, 2025 pm 03:20 PM

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

解釋GO反射軟件包的目的。您什麼時候使用反射?績效有什麼影響?解釋GO反射軟件包的目的。您什麼時候使用反射?績效有什麼影響?Mar 25, 2025 am 11:17 AM

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

您如何在GO中使用表驅動測試?您如何在GO中使用表驅動測試?Mar 21, 2025 pm 06:35 PM

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

如何使用跟踪工具了解GO應用程序的執行流?如何使用跟踪工具了解GO應用程序的執行流?Mar 10, 2025 pm 05:36 PM

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

您如何在go.mod文件中指定依賴項?您如何在go.mod文件中指定依賴項?Mar 27, 2025 pm 07:14 PM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
2 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
2 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MantisBT

MantisBT

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

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