未來Rust編程語言會成為主流嗎?

用戶68590185


頭條居然也能看到有人問rust的問題,作為很早關注rust的人,來回答一下吧。


我們先回顧下現有的主流編程語言。現在編程語言其實很多,但是可以看到大致趨勢是怎麼樣的。最早都是靜態類型的編譯型語言,比如c,java,pascal之類,後來出現了動態語言,比如php,python,js。動態語言的出現是有積極意義的,

  1. 不需要考慮內存分配,降低了內存錯誤的可能性

  2. 弱類型或者自動轉換類型,不需要考慮類型,容錯性更強,降低了編寫代碼的難度

  3. 代碼一般是源碼形式,發佈更容易

但隨著使用越來越多,壞處也越來越明顯。最重要的一個就是:無法保證類型,一方面無法約束使用者寫代碼,導致可能隱藏一些錯誤的類型傳入,另外一方面也無法進行有效的代碼提示。而且因為往往有gc,性能不行,以及無法編寫準實時,實時系統。


所以,新推出的語言往往都融合了語言研究的新成果,試圖解決這些問題。

怎麼樣才能融合靜態語言和動態語言的好處,規避短處呢?函數式語言的研究裡,經常有類型推導,抽象數據類型(ADT),都是好東西,正好能解決這些問題。尤其是編譯器構建工具llvm出現之後,編譯器構建越來越簡單。現在很多新語言都建立在llvm之上,簡化開發,把重點放在語言語法的優化上。rust也是使用了llvm,還有apple的新語言swift,也是建立在llvm之上。


rust支持ADT,支持類型推導,可以和動態語言一樣不用寫類型,讓編譯器自動推導。同時靜態類型又可以在編譯期檢查出大量的類型錯誤,沒有gc可以寫實時應用。可以說是融合了傳統靜態語言和動態語言的優點。


而且rust這個語言呢,主打的是內存安全。內存安全這塊,如果不是寫底層的人可能感觸還不深,但是如果經常寫這類代碼的,估計能感覺撓到癢處了。傳統為了實現內存安全,需要大量用鎖,但是rust在編譯期內,根據變量的生命週期,可以判斷是否內存安全,使得程序在內存安全的同時性能也更高。mozilla的新瀏覽器內核servo即是用rust開發的,可以說是一個非常大的項目了,驗證了rust語言本身。實際servo現在的測試版本,頁面渲染出錯比傳統瀏覽器更少,性能卻更強悍,併發式渲染頁面是以往語言難以實現的。


其實rust這樣的,靜態類型,類型推導,ADT,無gc的新型語言,其實是非常強大的,可能更類似於傳統的函數式語言,所以一些傳統c系語言的開發者難以接受。但實際上,可以看到,apple的swift也是類似的。說明這應該是編程語言發展的大方向。

其實現在各種語言也在試圖改進這些缺點,比如python和php也增加了類型標註,java也增加了一些類型推導的語法。但是這些老語言包袱太重,需要一個更為徹底的改進。


結論:就算rust不能成為未來的主流,它也會有一席之地。同時,因為語言發展的大方向如此,之後主流也必然是rust這類型語言的天下。


心中有碼


《2021年將成為系統程序員的“RUST”年》——Rust提供了業界創建安全系統編程的最佳選擇

Rust是一種開源系統編程語言,專注於速度、內存安全性和並行性。 Rust編程語言作為C、C++和其他語言的替代方案,以此來改善應用程序的安全狀況 Rust旨在利用高級語言的能力來滿足低級系統編程的需求。

未來Rust編程語言是否會成為主流,這需要了解Rust的過去和以後動向:

  • Rust的2021動向
  • 對於已過去的2020年,關於Rust你需要知道些什麼


最近幾年來,Rust積攢了很多粉絲,這不是毫無原因的——

對於滿足系統編程需求,C++是個選擇,而Rust旨在成為其可靠的替代品。實際上,它解決了C++中許多固有限制,例如:內存安全和線程安全問題,這些問題通常會導致令人厭煩的的分段錯誤。 Rust旨在利用高級語言的能力來滿足低級系統編程的需求。

在許多情況下,內存安全錯誤已成為安全漏洞的根本原因。從一定的視角下,請考慮一下這個數字–“ Microsoft的所有CVE中,大約70%是內存安全問題”。 C/C++程序員一直都在遇到與內存相關的錯誤——使用未初始化的內存、基於“釋放”內存後使用、緩衝區溢出。另一個棘手的錯誤源是數據爭用(data races)和競爭條件;基於進行讀/寫的順序對數據的不可預見的使用。

Rust是一種開源系統編程語言,專注於速度,內存安全性和並行性。三個詞定義了Rust:安全,併發和快速。其目的是防止首先引入內存安全錯誤。


一個簡單示例的截圖,顯示Rust在編譯時如何捕獲內存錯誤;而實際場景更加複雜,這是內置功能應派上用場的地方。

Rust在編譯時如何捕獲內存錯誤,數據源Source: Talk by Steve Klabnik (@SteveKlabnik)

儘管現代變體引入了更多的保護措施,但C++並不是一種內存安全的語言,鑑於使用C/C++構建了許多核心平臺組件,這樣說一點也不過分。



誰在使用Rust?


目前在使用Rust這門語言的產品及大廠,數據來源:Source: Ryan Levick’s presentation


說到利用Rust開發的應用,目前進行中的至少可以拿出兩個:

  • 操作系統作為系統程序的示例
  • Firefox Servo作為高併發的示例

Amazon Firecracker,是一種支持AWS Lambda和AWS Fargate的開源虛擬化技術,它是用Rust編寫的;目的是利用Rust的線程安全性並防止可能導致安全漏洞的緩衝區溢出錯誤。

與此有關AWS服務包括Amazon Simple Storage Service(Amazon S3),Amazon Elastic Compute Cloud(Amazon EC2),Amazon CloudFront,Amazon Route 53。

操作系統

AWS推出了Bottlerocket,這是一個用Rust編寫的基於Linux的容器操作系統,Bottlerocket僅包含運行容器的基本軟件,從而可以提高資源利用率並減少攻擊面。

Google Fuchsia OS的TCP/IP堆棧是用Rust編寫的。Fuchsia具有模塊化的內核體系結構,其中一些組件是用C ++編寫的,一些組件是用Go語言編寫的,其他組件則是用Rust語言編寫的。這說明Rust具有與其他語言編寫的組件進行交互以幫助實現模塊化內核體系結構的能力。

數據來源:https://blog.quarkslab.com/playing-around-with-the-fuchsia-operating-system.html


Firefox

在其新的CSS引擎(Quantum CSS)中,Firefox利用了Rust內置的編譯時支持並行性。Web瀏覽器為背景的並行性,意味著你正在嘗試並行呈現網頁的所有不同部分;要知道並行性是很困難的,因為它引入了“競賽條件”(Race Conditions),這些條件難以識別且難以排除。

這就是Rust發揮其威力的地方,Rust編譯器靜態驗證代碼以防止在編譯期間出現競爭狀況。

來源:Source:https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/


WebAssembly

WebAssemply通過將已編譯的代碼帶到瀏覽器來向Web應用程序添加新功能;WebAssembly允許你採用以編譯語言編寫的功能,例如:C ++和Rust,並在Web瀏覽器中安全地運行它。

Rust提供了業界創建安全系統編程語言的最佳機會。——微軟 Ryan Levick




最後,回顧下,2020年關於Rust發生了什麼變化

Rust最初被認為是Mozilla研究項目,直到最近才成為[開源Rust]項目的唯一官方贊助商。然而,在2020年8月,它解僱了250人,其中包括積極參與Rust項目和Rust社區的部分人。

(一些Rust維護者正在加入Amazon和Facebook,領導他們新創建的Rust團隊。Niko Matsakis( @nikomatsakis)加入了亞馬遜,Patrick Walton(@pcwalton)加入了Facebook,成為Rust團隊的技術負責人。此外,Rust基金會正在公司化成為一個獨立實體成立,但尚不清楚發起人是誰。目前的贊助商名單包括Sentry、GitHub、Google Cloud、Amazon Web Services、Mozilla和Microsoft。GitHub和Azure託管repo存儲庫和CI基礎結構。

與眾不同的Rust

  • 與Java不同,Rust的設計不需要垃圾收集器。不需要垃圾收集器意味著你不會受到運行時性能的損失,尤其是在低功耗硬件上。
  • 編譯時驗證以確保線程安全和內存安全。 我認為這是最重要的區別因素,因為你不再依賴運行時檢查。
  • 系統編程應將異常處理移至編譯時,並避免程序員犯錯誤在先。不允許為Null,也不支持例外。
  • 即用的軟件包管理器可以與生態系統的其餘部分集成(非常類似於Python),但是以前系統編程語言是沒有有此功能的。
  • 零成本抽象。什麼意思呢?也就是說,由於抽象的系統開銷,高級語言的性能和安全性通常需要權衡。 這會聯想到引用計數的指針和運行時檢查。

關於Rust的溫馨提示

儘管Rust語言有諸多好處,但誠然其陡峭的學習曲線是不可避諱的。

此外,機構組織恐怕不太會利用Rust重新編寫現有軟件系統,而寧願使用它來構建和當前生態系統作集成的新組件,因此,跨庫組件和工具鏈的互操作性成為重要的考量因素。


Rust社區

過去的五年中,Rust在StackOverflow上的開發者調查問卷中一直是最受歡迎的編程語言,位居榜首。

例如,在2020年調查中,有86.1%的開發者正在使用該語言或技術進行開發,並且表示有興趣繼續選用該語言。這幾乎是C ++收到的票數的兩倍!

另外也可以參考美國社群應用Reddit上Sub-Reddit調查(r / adventofcode),其中Rust在Python之後排在第二位。


工號1024


很高興能回答這個問題

Rust語言最重要的特性是內存安全,會檢測內存是否安全。這個內存安全問題,是自計算機誕生以來困擾廣大程序員的一個很大的問題,動不動就程序崩潰,系統跑著跑著出現內存洩漏,這些問題自從Rust出現,彷彿找到了解決良藥。目前很多大廠也在嘗試著用Rust做新項目,但是歷史的原因,其他語言積累非常深厚,歷史代碼庫非常龐大,就算是微軟這樣的巨頭,也是不可能馬上立即替換。再說RUST這個語言學習坡度要比其他語言大很多,目前程序員群體使用的相對來說還是很少,其他公司用的更是少之又少。

綜上所述,這個成為主流還是未知數,我的判斷可能性比較低。


分享到:


相關文章: