Hi,您好,歡迎來到西安天任軟件科技有限責任公司!

2024 年的 Rust 與 Go,看完你悟了嗎(ma)?

發布時間:2024-02-01 13:56:33

Go 和 Rust 都旨在幫助你編寫正确的程序,但(dàn)方式不同:例如,Go 提供了出色的内置單元測試框架和豐富的标準庫,而 Rust 則專注于利用其借用檢查機制(borrow checker)消除運行時錯誤。

我可以說些什麽而不讓大家生氣嗎(ma)?

Rust 和 Go 哪個更好?你應該爲下一個項目選擇哪種語言,爲什麽?兩者在性能、簡單性、安全性、功能特性、規模化(scale)和并發性等方面如何比較?它們有什麽共同點,又(yòu)有什麽根本區别?讓我們通過 Rust 和 Go 的友(yǒu)好且公平的比較來找到答案。

1. Rust 和 Go 都很棒

首先,非常重要的是(shì),Go 和 Rust 都是(shì)絕對優秀的編程語言。它們現(xiàn)代、強大、被廣泛采用,并提供卓越的性能。

Rust 是(shì)一種低級靜态類型多範式編程語言,專注于安全性和性能 -- Gints Dreimanis[2]

然而:

Go 是(shì)一種開源編程語言,可以輕松構建簡單、可靠且高效的軟件 -- golang.org[3]

在本文中,我将嘗試簡要概述我認爲的哪種場景下 Go 是(shì)理想的選擇,以及哪種場景下 Rust 可能是(shì)更好的選擇。

2. 相(xiàng)似之處

兩種語言的共同目标是(shì)什麽?

2.1 内存安全

從曆史來看,軟件錯誤和安全漏洞的最大原因之一是(shì)不安全或不正确地訪問内存。

Rust 和 Go 以不同的方式處理這個問題,但(dàn)兩者的目标都是(shì)比其他語言在管理内存方面更智能、更安全。

2.2 快速、緊湊的可執行文件

它們都是(shì)編譯語言,這意味着你的程序将被直接編譯爲可執行的機器代碼,以便你可以将程序部署爲單個二進制文件。與 Python 或 Ruby 等解釋語言相(xiàng)比,這也使得 Rust 和 Go 程序擁有極快的執行速度。

2.3 通用語言

Rust 和 Go 都是(shì)功能強大、可擴展的通用編程語言,你可以使用它們來開發各種現(xiàn)代軟件。兩者都擁有優秀的标準庫和蓬勃發展的第三方生态系統,以及強大的商業支持和龐大的用戶群。

2.4 務實的編程風格

雖然 Go 和 Rust 都具有與函數式和面向對象編程 (OOP) 相(xiàng)關的功能特性,但(dàn)它們都是(shì)實用語言(pragmatic languages),旨在以最合适的方式解決問題。

2.5 适于規模化的開發

Rust 和 Go 都有一些有用的功能特性,使它們适合大規模編程,無論是(shì)大型團隊,還是(shì)大型代碼庫,或兩者兼而有之。

例如,Rust 和 Go 都使用标準代碼格式化工具(Go 的 gofmt,Rust 的 rustfmt),這結束了關于括号放(fàng)置位置的無用争論。

兩者還具有優秀的内置高性能标準構建和依賴管理工具;不再需要與複雜(zá)的第三方構建系統搏鬥,也不必每隔幾年學習一個新系統。

3. 差異

雖然 Rust 和 Go 有很多共同點,但(dàn)在某些領域,理性的人可能會更喜歡一種語言而不是(shì)另一種語言,以滿足項目的特定需求。

3.1 性能

Go 和 Rust 都非常快。然而,Go 的設計更有利于快速編譯,而 Rust 則是(shì)針對快速執行進行了優化。

Rust 的運行時性能也更加一緻,因爲它不使用垃圾回收機制。另一方面,Go 的垃圾回收器減輕了程序員(yuán)的一些負擔,使其更容易專注于解決主要問題,而不是(shì)内存管理的細節。

對于執行速度勝過所有其他考慮因素的領域(例如遊戲編程、操作系統内核、Web 浏覽器組件和實時控制系統),Rust 是(shì)更好的選擇。

3.2 簡單

從設計上來說,Go 是(shì)一種小型語言:它的語法、關鍵字和語言結構都非常少。你可以快速學習 Go 的基礎知(zhī)識并使用該語言提升工作效率。

這使得 Go 在時間跨度短的項目中或需要快速引入大量新程序員(yuán)的團隊中具有優勢,尤其是(shì)在他們相(xiàng)對缺乏經驗的情況下。

3.3 功能特性

另一方面,Rust 幾乎擁有你能想象到的編程語言的所有功能特性,還有一些你可能無法想象的功能特性。這使得它成爲一種強大且富有表現(xiàn)力的語言,可以通過多種不同的方式來完成同一件事。

如果你是(shì)從其他語言過渡到 Rust 的,你可能可以找到你習慣的大多數功能的 Rust 等效項。當大型項目需要從 C++或 Java 等傳統語言遷移時,這給 Rust 帶來了優勢。

3.4 并發

與大多數語言不同,Go 語言的設計内置了對并發編程的支持,例如 goroutine(線(xiàn)程的輕量級版本)和通道(在并發任務之間通信數據的安全有效的方法)。

這些使得 Go 成爲網絡服務器和微服務等大規模并發應用程序的完美選擇。

3.5 安全

Rust 經過精心設計,以确保程序員(yuán)無法做一些他們不想做的不安全的事情,例如覆蓋共享變量。編譯器要求你明确在程序的不同部分之間共享數據的方式,并且可以檢測許多常見(jiàn)的錯誤和 bug。

因此,所謂的“與借用檢查器(borrow checker)戰鬥”是(shì)新 Rust 程序員(yuán)的常見(jiàn)抱怨。用安全的 Rust 代碼實現(xiàn)程序通常意味着從根本上重新思考其設計,這可能會令人沮喪,但(dàn)當可靠性是(shì)你的首要任務時,這樣做的好處是(shì)值得的。

3.6 規模化(scale)

Go 旨在讓你輕松擴展項目和開發團隊。它的極簡設計帶來了一定的一緻性,并且明确定義的标準風格的存在意味着任何 Go 程序員(yuán)都可以相(xiàng)對快速地閱讀和理解新的代碼庫。

當談到大型軟件開發時,清晰勝于聰明。對于大型組織,尤其是(shì)許多分布式團隊來說,Go 是(shì)一個不錯的選擇。其快速構建時間也有利于快速測試和部署。

4. 權衡取舍

Rust 和 Go 的設計團隊做出了一些截然不同的選擇,所以讓我們看看這些權衡取舍使這兩種語言彼此截然不同的一些領域。

4.1 垃圾回收

一般來說,具有垃圾回收和自動内存管理功能的語言(如 Go)可以快速輕松地開發可靠、高效的程序,對于某些人來說這是(shì)最重要的。

但(dàn)是(shì)垃圾回收由于其性能開銷和停止世界(Stop-The-World)的暫停,可能會使程序在運行時的行爲變得不可預測,有些人發現(xiàn)這種不一緻是(shì)不可接受的。

程序員(yuán)必須明确負責分配和釋放(fàng)每個字節内存的語言(例如 Rust)更适合實時或超高性能應用程序。

4.2 抽象

計算機編程的曆史是(shì)一個日益複雜(zá)的抽象的故事,它讓程序員(yuán)可以解決問題,而不必過多擔心底層機器的實際工作方式。

這使得程序更容易編寫并且可能更可移植。但(dàn)對于許多程序來說,訪問硬件以及精确控制程序的執行方式更爲重要。

Rust 的目标是(shì)讓程序員(yuán)“更接近金屬”,擁有更多的控制權,而 Go 抽象了架構細節,讓程序員(yuán)更接近問題。

4.3 速度

Rust 進行了許多設計權衡,以實現(xiàn)最佳的執行速度。相(xiàng)比之下,Go 更關心簡單性,并且願意爲此犧牲一些(運行時)性能。

在這一點上你是(shì)喜歡 Rust 還是(shì) Go 取決于你是(shì)願意花更多的時間等待程序構建,還是(shì)等待程序運行。

4.4 正确性

Go 和 Rust 都旨在幫助你編寫正确的程序,但(dàn)方式不同:例如,Go 提供了出色的内置單元測試框架和豐富的标準庫,而 Rust 則專注于利用其借用檢查機制(borrow checker)消除運行時錯誤。

公平地說,用 Go 編寫給定的程序更容易,但(dàn)結果可能比 Rust 版本更容易包含錯誤。Rust 對程序員(yuán)施加了紀律約束,但(dàn) Go 讓程序員(yuán)選擇他們想要對特定項目采取的紀律程度。

5. 結論

我希望這篇文章能讓你相(xiàng)信 Rust 和 Go 都值得你認真考慮。你應該拒絕這種錯誤的困境:你隻能學習其中之一。事實上,你了解的語言越多,你作爲軟件開發人員(yuán)的價值就越高。

你學習的每一種新語言都會給你思考問題的新方法,這隻能是(shì)一件好事。任何軟件項目的質量和成功最重要的因素不是(shì)語言的選擇,而是(shì)程序員(yuán)的技能。

當使用最适合你的語言時,你變得最熟練,并且你也能享受到最多的編程帶給你的樂趣。因此,如果問題是(shì)“我應該學習 Rust 或 Go 嗎(ma)?”,唯一正确的答案是(shì)“是(shì)的”。

技術前沿拓展

前端開發,你的認知(zhī)不能僅局限于技術内,需要發散思維了解技術圈的前沿知(zhī)識。細心的人會發現(xiàn),開發内部工具的過程中,大量的頁面、場景、組件等在不斷重複,這種重複造輪子的工作,浪費(fèi)工程師的大量時間。

介紹一款程序員(yuán)都應該知(zhī)道的軟件JNPF快速開發平台,很多人都嘗試用過它,它是(shì)功能的集大成者,任何信息化系統都可以基于它開發出來。

這是(shì)一個基于 Java Boot/.Net Core 構建的簡單、跨平台快速開發框架。前後端封裝了上千個常用類,方便擴展;集成了代碼生成器,支持前後端業務代碼生成,實現(xiàn)快速開發,提升工作效率;框架集成了表單、報表、圖表、大屏等各種常用的 Demo 方便直接使用;後端框架支持 Vue2、Vue3。


以上爲本次所有分享内容

上一篇:Linux 設置定時任務常用的三種方法
下一篇:沒有了