Rust語言

Rust語言

Rust是一門系統程式語言 ,專注於安全 ,尤其是並發安全,支持函式式和命令式以及泛型等編程範式的多範式語言。Rust在語法上和C++類似 ,但是設計者想要在保證性能的同時提供更好的記憶體安全。 Rust最初是由Mozilla研究院的Graydon Hoare設計創造,然後在Dave Herman, Brendan Eich以及很多其他人的貢獻下逐步完善的。 Rust的設計者們通過在研發Servo網站瀏覽器布局引擎過程中積累的經驗最佳化了Rust語言和Rust編譯器。 Rust編譯器是在MIT License 和 Apache License 2.0雙重協定聲明下的免費開源軟體。 Rust已經連續三年(2016,2017,2018)在Stack Overflow開發者調查的“最受喜愛程式語言”評選項目中折取桂冠。

基本信息

設計特色

Rust致力於成為優雅解決高並發和高安全性系統問題的程式語言 ,適用於大型場景,即創造維護能夠保持大型系統完整的邊界。這就導致了它強調安全,記憶體布局控制和並發的特點。

標準Rust性能

標準Rust性能與標準C++性能不相上下。

語法

Rust的具體語法和C,C++類似,都是由花括弧限定代碼塊,還有一樣的控制流關鍵字,例如if,else,while,和for。然而也並非所有的C或者C++關鍵字被實現了。某些Rust函式(比如關鍵字match用於模式匹配)對於那些精通這些語言的人就沒那么熟悉了。儘管與C/C++極其相似,Rust在深層語法上跟元語言家族的語言像是Haskell更接近。基本上一個函式體的每個部分都是表達式,甚至是控制流操作符。例如,那個普通的if表達式也取代了C的三元表達式。一個函式不需要以return表達式結束,在這種情況下函式最後的表達式就是返回值。

記憶體安全

Rust語言系統設計於保證記憶體安全,它在安全代碼里不允許空指針,懸垂指針和數據競爭。數值只能用一系列固定形式來初始化,要求所有輸入已經被初始化。在其它語言中複製函式指針或者有效或者為空,比如在鍊表和二叉樹等數據結構中,Rust核心庫提供Option類型,用來測試指針是否有值。Rust同時引入添加語法來管理生命周期,而且編譯器通過租借檢查器來說明相關理由。

記憶體管理

Rust不像Go,Java以及.NET Framework那樣使用自動垃圾回收系統。不同的是Rust通過RAII來管理記憶體和資源,還可選引用計數。Rust以低開銷提供資源確定性管理。Rust也支持值的棧分配並不表現暗箱。

Rust里也有引用概念(用&符號),不包含運行時引用計數。使得此類指針的安全性已獲得租用檢查器的編譯時驗證,阻止懸垂指針和其它形式的末定義行為。

所有權

Rust有一個所有權系統,所有的值都有一個唯一的屬主,值的有效範圍跟屬主的有效範圍一樣。值可以通過不可變引用&T傳遞,可變引用μt T傳遞,T值遞。在任何時候,或者有多個不可變引用,或者只有一個可變引用。Rust編譯器在編譯時執行這些規則同時檢查所有引用的有效性。

類型和多態

Rust的類型系統支持一種類似類型類的機制,叫“traits”,是被Haskell激發靈感的。這是一種用於特定同質法的設施,通過給類型變數聲明添加約束來實現。其它來自Haskell的特性,如更高類型多態還沒有支持。

Rust為以let關鍵字聲明的變數而產生類型推特導特性。這樣的變數不需要賦初值來判斷類型。如果某個分支代碼沒能給變數賦初值將會產生一個編譯時錯誤。對變數進行多次賦值要使用mut關鍵字標記。

函式可以接收泛型參數,但通常要求泛型實現某種特性或者幾種特性。在這種函數裡面,這種泛型值只能通過這些特性來使用。這就是說一個泛型函式在定義的時候就能完成類型檢查。這是對標C++模板,那種本質鴨式,只能在以具體類型實例化後完成檢查。C++概念解決同樣的問題,並且有希望能成為C++20標準的一部分。

然而,Rust泛型的實現與C++模板的典型實現類似:每次實例化都會生成一份單獨的代碼這被稱作單態,和經常在Java和Haskell中使用的類型擦除方案類比。單態的好處是為每一個具體用例提供最佳化代碼,缺點是增長了運行時和很多結果檔案。

Rust裡面的對象系統是基於實現,特性和結構化類型的。實現扮演的角色跟其它語言中的類相似,以關鍵字impl來定義。繼承和多態是由特性提供;它們允許方法被定義或者混合在實現裡面。結構類型用於定義欄位。實現和特性自己無法定義欄位,而且只有特性能夠提供繼承。至於其它好處,這個阻止了多繼承中的菱形繼承問題,像C++一樣。換句話說,Rust支持接口繼承,但是通過複合替代實現繼承;參見繼承複合。

創建目的

創建這個新語言的目的是為了解決一個頑疾:軟體的演進速度大大低於硬體的演進,軟體在語言級別上無法真正利用多核計算帶來的性能提升。Rust是針對多核體系提出的語言,並且吸收一些其他動態語言的重要特性,比如不需要管理記憶體,比如不會出現Null指針等等。

創始人及項目負責人

“Rust”最初是Mozilla公司的 Graydon Hoare的私人項目。2009年Mozilla開始贊助此項目,並有若干 Mozilla 員工參與 Rust 語言的設計和研發。2013年8月,Graydon Hoare卸任 Rust 技術負責人職位,由Brian Anderson接任。 2015年5月15日,Rust 1.0版本正式發布。2017年9月,Brian Anderson離開Mozilla,項目核心團隊由 Aaron Turon和 Niko Matsakis接管共同領導,另外,Aaron Turon是 Mozilla的Rust團隊的負責人。

最新版本說明

Mozilla在2014年10月宣布發布Rust編譯器和工具的0.12版。

0.12版有1900多項變化和bug修正,其中主要包括:重寫了入門文檔(現在叫Rust Guide);繼續提高了包管理器Cargo等。

在2015年1月,發布了Rust-1.0.0-alpha版本。

2015年5月15日,Rust程式語言核心團隊正式宣布發布Rust 1.0版本。

2015年6月25日,Rust發布了1.1版本。同時發布1.2測試版本

..……

2016年11月14日,Rust發布了1.13版本,同時發布1.14測試版本。

2018年1月4日,Rust發布1.23版本

2018年9月25日,Rust發布1.29.1版本

Rust 1.1 穩定版 更新內容

•編譯速度相對於1.0版本提升了32%。

•編譯器提示信息更加完善,參數--explain可提供更多編譯錯誤類型的詳解

•模組std::fs中新增了一批穩定版API

•初步支持靜態連結C運行庫MUSL,Linux環境下編譯出的程式可實現零依賴(可以不再依賴glibc)

•Cargo增加新命令cargo rustc,支持向rustc傳遞任意參數

Rust 1.2 測試版 更新內容

•編譯速度在1.1版本的基礎上再提升30%

•並行編譯又能用了,默認未開啟,如果開啟,還能提升33%的編譯速度(數據來自4核編譯rustc)

•Cargo性能提升(編譯Servo時啟動速度提升10倍),可在多個package之間共享依賴包快取

•初步支持MSVC(Microsoft Visual C),以後Windows環境中不需要MinGW/MySYS/GCC了

Rust 1.2 穩定版 將在六周之後發布,屆時還將一併發布 1.3 測試版

Rust 1.13 stable 部分更新內容:

•新的運算符,Rust已經獲得了一個新的運算符,通過減少所涉及的視覺污染,能更好的處理錯誤。

•穩定語句上的屬性

•修復空元組 structs/variants #[derive]

•Fix 'if' 條件的生存期規則

•避免載入和解析未配置的非內聯模組

歷史簡介

Rust 語言在2006年作為 Mozilla 員工 Graydon Hoare 的私人項目出現,而 Mozilla 於 2009 年開始贊助這個項目。第一個有版本號的 Rust 編譯器於 2012 年 1 月發布。Rust 1.0 是第一個穩定版本,於 2015 年 5 月 15 日發布。

代碼示例

相關詞條

相關搜尋

熱門詞條

聯絡我們