Rust編程語言
Rust編程語言是一種系統化的編程語言,支持函數式和命令式編程范式泛型等多范式語言。Rust在語法上類似于C,但是設計者希望在保證性能的同時提供更好的內存安全性。 Rust最初是由Mozilla研究院的Graydon Hoare設計和創建的,后來在Dave HermanBrendan Eich等人的貢獻下逐漸完善。Rust的設計師們通過他們在開發伺服網站瀏覽器的布局引擎中積累的經驗,對Rust語言和Rust編譯器進行了優化。
Rust compiler is in MIT license and Apache License 2 license 2.0雙重協議聲明下的自由開源軟件。 Rust已經連續七年了(2016,2017,2018,2019,2020, 2021, 2022)在stack 溢出開發者調查中“最喜歡的編程語言”在評選項目中贏得桂冠。??
研發背景 編輯本段
Rust language在2006年作為Mozilla員工Graydon Hoare的私人項目出現,Mozilla在2009年開始贊助這個項目。第一個版本號為的Rust編譯器發布于2012年1月。Rust 1.0是第一個穩定版本,2015年5月15日發布。
版本記錄 編輯本段
Mozilla在2014年10月宣布發布Rust編譯器和工具的0.12版。
版本12有超過1900個更改和錯誤修復,包括:重寫了入門文檔(Now its called Rust Guide guide)繼續改進包管理器貨物等。
2015年1月,Rust發布-1.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版本
2020年6月18日,Rust發布了1.44.1版本
Rust 1.1 穩定版
編譯速度相對于1.版本0已升級了32%
編譯器提示信息更加完善,參數-Explain可以對編譯錯誤的類型提供更詳細的解釋
std::fs模塊中添加了許多穩定的API
初步支持靜態link C運行時MUSL,在Linux環境下編譯的程序可以實現零依賴(你不能再依賴glibc了)
Cargo增加了一個新命令cargo rustc,支持向rustc傳遞任意參數
Rust 1.2 測試版
編譯速度在1.1版本,然后升級30%
可以再次使用并行編譯,默認不開啟如果開啟,可以提升33%的編譯速度(數據來自4核編譯器rustc C)
貨物性能改進(編譯伺服時啟動速度提高10倍),它可以在多個包之間共享依賴包緩存
對MSVC的初步支持(Microsoft Visual C)未來的Windows環境不需要MinGW/MySYS/GCC了
Rust 1.2 穩定版 將在六周后發布,屆時將發布 1.3 測試版
Rust 1.13
一個新的操作符,Rust獲得了一個新的操作符,它可以通過減少所涉及的視覺污染來更好地處理錯誤。
穩定語句的性質、修復空元組 結構/Variable #derive]、Fix 'if' 條件生存期規則、避免加載和解析未配置的非內聯模塊
設計特色 編輯本段
Rust致力于成為一種優雅的編程語言,解決高并發和高安全性系統的問題,適用于大規模場景,即創建和維護能夠保持大規模系統完好無損的邊界。這導致它強調安全性內存布局控制和并發性。
標準性能 編輯本段
標準防銹性能與標準c性能相當。
語法介紹 編輯本段
Rust的具體語法和CC類似,大括號定義代碼塊,同樣的控制流關鍵字,比如ifelsewhilefor。但是,并不是所有的C或C關鍵字都實現了。一些Rust函數(例如,關鍵字match用于模式匹配)對于精通這些語言的人來說,就沒那么熟悉了。盡管與C/c很像,Rust在深層語法上更接近Haskell等元語言家族語言。基本上,函數體的每一部分都是一個表達式,甚至是一個控制流操作符。比如普通的if表達式也代替了c的三進制表達式。函數不需要以返回表達式結束,在這種情況下,函數的最后一個表達式就是返回值。
內存安全 編輯本段
Rust語言系統是為了保證內存安全而設計的,在安全代碼中不允許空指針懸空指針和數據競爭。值只能以一系列固定的形式初始化,要求所有輸入都已初始化。在其他語言中,復制函數指針要么有效,要么為空比如在鏈表二叉樹等數據結構中,Rust core庫提供了選項類型來測試指針是否有值。Rust還引入了加法語法來管理生命周期,編譯器通過租用檢查器來解釋原因。
內存管理 編輯本段
Rust不像Go,Java和.net 框架,使用自動垃圾收集系統。不同的是Rust通過RAII管理內存和資源,還可以選擇引用計數。Rust以較低的開銷提供了資源的確定性管理。Rust還支持值的堆棧分配,不代表黑盒。
Rust里還有指稱的概念(用&符號)不包含運行時引用計數的。因此,租約檢查器在編譯時已經驗證了這種指針的安全性,防止了懸空指針和其他形式的未定義行為。
版權系統 編輯本段
Rust有一個所有權體系,所有的值都有一個唯一的所有者,值的有效范圍和所有者是一樣的。值可以通過不可變引用t可變引用mut T和t傳遞。在任何時候,要么有多個不可變的引用,要么只有一個可變的引用。Rust編譯器在編譯時執行這些規則,并檢查所有引用的有效性。
類型多態 編輯本段
生銹與腐蝕的類型系統支持一種類似于類型類的機制,稱為“traits”受到了哈斯克爾的啟發。這是一個針對特定同質方法的工具,通過向類型變量聲明添加約束來實現。Haskell的其他特性,比如更高類型的多態性,還不被支持。
Rust為用let關鍵字聲明的變量生成類型導數。這樣的變量不需要初始值來判斷類型。如果一個分支代碼沒有給一個變量賦值,就會產生一個編譯時錯誤。當變量被多次賦值時,使用mut關鍵字來標記變量。
函數可以接收泛型參數,但泛型通常需要實現某些特征或幾個特征。在該函數中,該通用值只能通過這些功能使用。這意味著泛型函數在定義時可以完成類型檢查。這是基準C模板,本質上像鴨子,只能在特定類型中實例化后檢查。概念C解決了同樣的問題,并有希望成為C 20標準的一部分。
然而,Rust泛型的實現類似于C模板的典型實現:每個實例化都會生成一個單獨的代碼,稱為singleton,類似于Java和Haskell中常用的類型擦除方案。singleton的優點是為每個具體用例提供優化代碼,缺點是增加了運行時間和很多結果文件。
Rust中的對象系統基于實現特征和結構化類型。實現扮演的角色類似于其他語言中的類,由關鍵字impl定義。特性提供了繼承和多態;它們允許在實現中定義或混合方法。結構類型用于定義字段。實現和屬性本身不能定義字段,只有屬性才能提供繼承。至于其他好處,這防止了多重繼承中的鉆石繼承問題,像c。換句話說,Rust支持接口繼承,但是通過復合替換實現繼承;參見繼承復合。
附件列表
詞條內容僅供參考,如果您需要解決具體問題
(尤其在法律、醫學等領域),建議您咨詢相關領域專業人士。