使用Rust的開發效率怎麼樣?


開發效率沒有一個統一的客觀的評價標準,基本靠個人主觀感覺而定。每個人對不同語言掌握的熟練度也是影響開發效率的重要因素。我沒有用Rust做過大規模的正式的項目,僅僅寫過一些實驗性代碼,以下是我的個人感覺。

優點:它的核心設計非常棒,它的思想,它的DNA,是一流的。它吸收了許多編程語言的優點,摒棄了許多缺點,是這麼多年來最有潛力的C/C++的競爭對手。在許多方面,表達能力要優於C/C++,比如代數類型系統、模式匹配、健康宏、基於 trait 的泛型系統、簡潔的錯誤處理、方便的模塊系統等。

殺手鐧:實現了無GC條件下的內存安全和線程安全。C/C++裡面的內存錯誤是非常讓人討厭的,特別是那種難以復現,難以debug,難以找到root cause的問題。Rust則是把這類問題轉變成了容易解決的編譯錯誤問題。初學者最不習慣的也就是這一點,各式各樣的編譯錯誤比較打擊積極性。但是解決編譯錯誤的難度,跟運行期的debug難度不是一個等級的。從這個角度考慮,Rust應該是提高了開發效率的。

缺點:畢竟才正式發布1年,語言本身不夠成熟,缺少了一些重要特性。比如高階類型系統、更好的OOP支持、更方便的非同步操作等等。還有一些關鍵功能還在開發過程中,或者還處於unstable階段。生態也不完善。各領域的優質庫依然大幅落後於競爭對手,比如沒有大家高度認可的高性能易用的web服務框架。IDE等開發工具也不如成熟的編程語言。

總結,Rust算不上開發效率特別高的語言,它的主要優點也不是這個。入門曲線有點陡峭,但是當你熟悉之後,開發效率會有大幅提升。如果把解決bug的時間一起考慮,Rust的開發效率絕對不算低。它的底子非常好,潛力巨大,隨著生態環境越來越完善,它的開發效率還會大幅提升。


我來捨命奶一口:別說C++了,某些方面寫起來比Python還爽快

很少需要寫類型。不止是可以省那幾個字元,將來決定改變類型的時候也少改那幾個字元。i32也比int32寫得爽啊有木有

函數可以返回多值(元組)。不過目前只能在let語句里unpack;這個和缺少generator是我心中的兩大遺憾

任何需要寫值的地方(例如調用函數時傳參,甚至if語句的條件判斷)都可以塞一個語句塊。這一坨代碼只是要計算一個值,邏輯非常清晰

enum(尤其是和match配合)太強

很多語句塊比如for循環里也可以定義函數或者use,控制名稱衝突,又不會像解釋型語言那樣帶來性能影響

隨手寫閉包,然後隨便塞進Vec

也不知道應該叫函數式還是面向對象,寫2.pow(3)而不是pow(2, 3),寫v.iter().skip(1)而不是skip(v.iter(),1),至少有個好處是不需要去加句use pow/skip。為原生類型可以實現trait添加方法

完全不用擔心打開文件未關閉、申請內存未釋放,寫起來和有gc的語言一樣甚至更好

多線程時數據和鎖是一體的

lazy_static,沒有這個我都不會寫程序了(話說別的語言怎麼解決的?)。自己隨手寫宏也是很方便的,stringify這些基礎設施齊全

Compiler Plugins黑科技,有人用它模擬了Python的裝飾器;看你腦洞有多大了

如果要寫底層的數據結構或者複雜的邏輯,所有權的問題會比較煩。用好mem里的函數,謹慎使用裸指針,思路一定要清晰。總地來說我覺得這時犧牲點開發效率保證代碼質量是值得的

很多人說Rust編譯很難通過。我的感受是只要理解了借用那一套東西,就知道應該怎麼改。不過rust的基礎理論太嚴格了,導致有的錯誤我看不懂;好在錯誤信息給得很詳細,rustc你是大爺你要我加where Self: Sized那我就加唄(後來看了rustc --explain弄明白了)

最後說一下不爽之處:

(有很多不爽是因為某些功能計劃之中尚未實現比如HKT,這裡就不列了)

Any功能還比較弱

這Path也太複雜了吧,什麼Prefix、OsStr。也許只是因為我習慣了C的那一套

最重要的String和char的問題,我知道你說的都是unicode標準,可是用起來真不方便。regex默認關閉unicode來著(沒用過,只稍微看過文檔)

PartialOrd也是這個問題。不過為了方便而捨棄嚴謹的話,最終只會全都失去……吧


C 寫了快十年了,全職幹了三四年 OC Swift,PHP Python Ruby 這些經常寫點小東西,用起來可比 Perl 簡單多了,目前工作主要是擼 Golang 也有小十萬了,連 Erlang 我都沒怕過,但是一看到 Rust 就傻眼了,這是給人看的么。


推薦閱讀:

哪些書籍能提高程序員的演算法能力?
創造編程語言應該學習什麼語言?設計編程語言最好是用C/C++嗎?
函數式編程的函數是如何實現的?
為什麼沒有中文的編程?
除了 Go、Rust、Nim,還有哪些新編程語言更靠譜?

TAG:編程語言 | 編程 | Rust編程語言 |