全面比較Rust與Go語言
譯文【51CTO.com快譯】
眾所周知,為了在競爭激烈的業(yè)務(wù)應(yīng)用中得以脫穎而出,并能夠蓬勃發(fā)展,選擇正確的基礎(chǔ)性編程語言是非常至關(guān)重要的。與此同時,對于企業(yè)和開發(fā)人員來說,能夠為其用戶提供良好的使用體驗也是值得考慮的當(dāng)務(wù)之急。
根據(jù)過往的項目實踐經(jīng)驗:在如今各種琳瑯滿目且各有專攻的編程語言中,我們很難只選擇其中的一種,去通配各種實際應(yīng)用的場景。因此,在本文中,我將和您討論兩種最受歡迎的編程語言--Rust和Go,并詳細比較它們各自的優(yōu)缺點。
Rust
于2010年推出的Rust語言,旨在通過各種出色的模塊化,提高程序的安全性,以及改進原有的并發(fā)量和性能。有研究表明(請參見--https://blog.rust-lang.org/2018/11/27/Rust-survey-2018.html):2018年,Rust編程語言的使用量增長了約有23%。目前,大約有74.5%的開發(fā)人員看好Rust編程語言。而業(yè)界用到Rust編程語言的項目也是比比皆是。
Rust的優(yōu)點
- 相對其他編程語言,Rust的整體速度要快許多。這恐怕也是它如此流行的原因之一。
- 大幅減少了崩潰、測試和調(diào)試的時間和頻率。
- 具有零成本抽象(Zero-cost abstraction)和運行時(runtime)的可預(yù)測行為。
- 阻止那些不受保護的內(nèi)存訪問。
- Rust擁有廣泛的支持社區(qū)。
- Rust可與C、FFI(譯者注:Foreign Function Interface)和許多其他語言進行互操作。
Go
由Google于2007年推出的Go語言,旨在從理念上提高程序的“生產(chǎn)力”。Go(也稱為Golang,https://golang.org/)在內(nèi)置并發(fā)數(shù)和垃圾收集方面非常見長。Go被設(shè)計為可以橫跨各種組件的邊界,來管理嚴苛的依賴性和魯棒性。
Go的優(yōu)點
- Go的最大優(yōu)點是簡便。
- 它是一種以高效、簡潔和順磁性(paramagnetic)而著稱的語言。
- 開發(fā)人員將受益于該語言極大的靈活性。
- 就代碼的編譯效率而言,它比任何其他編程語言都要迅速。
- 它與C#語言之間具有極強的互操作性。
上面是我們對Rust和Go語言基本特征的介紹。下面,讓我們從性能、并發(fā)量、開發(fā)速度、以及內(nèi)存管理等方面進行比較。
性能
無論是軟件程序還是應(yīng)用產(chǎn)品,性能總是大家考慮的首要因素。就兩種語言的運行速度而言,Rust之于Go,好比C ++之于C。而在開發(fā)速度方面,Go會比Rust來得快。在性能方面,Go比Rust要慢很多。
并發(fā)量
撇開功能不談,各類應(yīng)用程序的基本原則應(yīng)該是:能夠保障在平穩(wěn)運行的同時,避免出現(xiàn)各類數(shù)據(jù)遭受損壞的風(fēng)險。因此,我們往往需要通過任務(wù)之間的狀態(tài)共享,來控制此類風(fēng)險。那么就并發(fā)而言,Go的語法中會帶有內(nèi)置的并發(fā)性,而Rust并沒有。
開發(fā)速度
在某些快速試錯和迭代的需求場景中,有時候程序的開發(fā)速度比其本身的運行速度更為重要。Go語言自帶的簡單性和直接性,使其比許多其他語言更為迅速和高效。而在另一方面,Rust雖然帶有更多的語言功能,但是這也導(dǎo)致了程序員的開發(fā)、甚至是編譯的過程更需要時間。因此總的說來,Go語言在開發(fā)和編譯上的速度更加占優(yōu)。
內(nèi)存管理
通過上述提到的零成本抽象,Rust使用編譯策略進行內(nèi)存管理(請參見--https://dzone.com/articles/memory-management-net)。如果Rust程序中存在任何安全問題,它將在編譯階段無法被執(zhí)行。Go語言雖然有著與Rust一樣的內(nèi)存安全性。但是由于Go的內(nèi)存管理是在運行時自動處理的,因此有時可能會引起某些不可預(yù)見的問題??梢姡琑ust在內(nèi)存管理方面比Go要更為可靠。
不過在Web開發(fā)中,雖然兩者都能夠提供出色的Web設(shè)計支持,但是在普通開發(fā)者眼中,Go要比Rust略強一些。
總結(jié)
其實此類細枝末節(jié)的討論和比較,可能永遠也沒有盡頭。凡事都有優(yōu)缺點,縱然是頂級的編程語言也是如此。那么我們具體應(yīng)該如何去選擇,則很大程度上取決于手頭的實現(xiàn)項目需求。下面,我只是給出一些適合于某種語言的場景與需求的經(jīng)驗總結(jié):
何時該選擇Rust:
- 如果您計劃與C語言實現(xiàn)互操作的話。
- 如果性能是您業(yè)務(wù)的主要目標。
- 當(dāng)您需要對平臺中的每個程序進行控制,并希望準確地了解系統(tǒng)中每個線程的性能時。
何時該選擇Go:
- 當(dāng)程序的可讀性是您的主要需求時。
- 如果您的目標是簡單且統(tǒng)一的話。
- 如果您想實現(xiàn)更快的開發(fā)和編譯的話。
原標題:A Detailed Comparison Between Top Programming Language: Rust vs Go ,作者: Paresh Sagar
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】