展望2016年的Rust語言
2006年,編程語言工程師Graydon Hoare利用業余時間啟動了 Rust語言項目 。該項目充分借鑒了C/C++/Java/Python等語言的經驗,試圖在保持良好性能的同時,克服以往編程語言所存在的問題。其最大的特點在于保持較高的運行效率、深入的底層控制和廣泛應用范圍的同時,解決了傳統C語言和C++語言中的內存安全問題。2009年, Mozilla 接手Rust項目,創建了以Graydon為首的專業全職開發團隊,并且開放了該項目的源代碼。2012年1月,第一個面向公眾的預覽版本——v0.1 發布。經歷了大刀闊斧的10年發展,Rust在2015年5月份正式發布1.0版本。z之后,Rust開始遵守 SemVer 2.0 規范,進入穩步發展的階段。那么,作為一個正在崛起的語言,Rust在2016年將會向何處發展呢?
目前,Rust以其無虛擬機、無垃圾收集器、無運行時、無空指針/野指針/內存越界/緩沖區溢出/段錯誤、無數據競爭等特點已經吸引了廣大開發人員的廣泛關注。但是,作為一門新興的語言,Rust仍然有很多地方需要完善。據 Rust核心開發團隊透露 ,Rust在2016年的發展主要包括加大在框架上的投入、完善關鍵特性和擴展應用領域等三個方向。
首先,在加大在框架上的投入方向,Rust團隊準備在Crater工具、增量編譯和IDE集成三個方面著手開始。作為測試編譯器的工具, Crater 目前已經成為Rust社區不可或缺的工具。它能夠有效發現編譯器中存在的問題。此外,Rust開發團隊還經常使用Crater來比較穩定版與開發版的不同以及評估不同改變所帶來的影響。對于如此重要的工具,Rust團隊未來將會擴展其對Linux外其他平臺的覆蓋度,使得Crater更簡單易用,并包含除 crates.io 以外其他源的代碼。而且,該團隊還計劃制作一個適用于庫作者的版本(使得庫的變化對下游代碼的影響可以很容易被觀察到)。在增量編譯方面,Rust才剛剛起步。之前,Rust編譯器會把所有的代碼作為輸入,經過類型檢查后發送給LLVM進行優化。這種方式在帶來深度優化的同時,也使得每次編譯都非常耗時,加大了代碼調試的難度。未來,Rust團隊將在支持增量編譯方面努力。而且,增量編譯工作還包括了重新構造編譯器,來引進一種新的中間層表示—— MIR 。MIR是一種更加簡單和底層的Rust代碼形式,能夠使得Rust編譯器更加簡單。最后,Rust團隊還試圖擴展Rust編譯器,使其可以與IDE或者其他工具更深入的集成。
完善關鍵特性方向包括了標準化、改善借用檢查器(Borrow Checker)以及完善插件穩定性三個方面。在Rust語言設計之初,其試圖試圖實現的目標就包括用戶不為不使用的東西付費和用戶所使用的東西肯定是最好的這兩個方面。目前,Rust 1.0已經實現了第一個目標。但第二個目標還未實現。為此,Rust團隊準備在標準化方面進行努力。標準化就是允許用戶在有需要時提供多個、相互重疊的 trait實現,從而使得每個實現都有更加專業的應用范圍。此外,標準化還能改善代碼的重用性。作為某種意義上Rust的核心,借用檢查器通過抓取 use-after-free類似的問題保證了編譯器在沒有垃圾收集器情況下的內存安全。但是,目前的借用檢查器偶爾還存在誤檢測的情況。Rust團隊計劃通過重構借用檢查器,使其能夠以細粒度范圍(移動到MIR所移動的一步)查看代碼,從而解決該問題。最后,目前Rust的很多crate都使用了高度不穩定的編譯器插件,非常容器引起編譯器出現問題。Rust團隊計劃提出一個新的插件設計框架,使其更加魯棒,并能夠提供內置純凈的宏擴展支持。
最后,擴展Rust的應用領域方向包括交叉編譯、安裝Cargo以及追蹤鉤(tracinghook)三個方面。盡管目前的Rust能夠支持交叉編譯,但該過程需要大量的人工參與。Rust團隊正試圖自動化交叉編譯的流程,使得用戶只需要下載一個對應版本的預編譯libstd庫,然后執行編譯/安裝即可。此外,Cargo缺乏安裝可執行文件的方法。Rust團隊希望能夠使用cargo install這樣的命令,來實現Linux中make install的功能。在追蹤鉤方面,Rust團隊深謀遠慮。使用Rust一個最高級的方法就是把Rust代碼嵌入到用Ruby或Python等高級語言編寫的系統中。這種嵌入法一般通過為Rust代碼提供一個C語言的API來完成。這種方法在目標平臺運行傳統GC等這種C語言友好的內存管理機制時十分高效。然而,與一個使用更高級GC的環境進行集成將會十分困難。與這些引擎進行集成需要非常小心進行代碼編寫工作。否則,非常小的錯誤都可能導致系統崩潰。為了把Rust引入到更高級GC的環境中,Rust團隊計劃擴展編譯器的能力,使其能夠產生追蹤鉤。這些鉤子就可以被GC用來搜索堆棧和識別root,大大簡化與高級VM集成代碼的編寫工作。
從以上分析可以看出,Rust在2016年仍將會有長足的發展。而且,從Rust語言的首屆會議 RustCamp 2015 來看,Rust社區未來也會更加活躍。目前,Rust已經應用到OpenDNS和Skylight等生產環境,以及瀏覽器引擎Servo和Rust編譯器等項目。Rust1.0版本代碼貢獻者莊曉立在一次訪談中表示,Rust未來一定會繼續沿著“確保內存安全、無運行開銷、高效實用”的既定方向持續發展。