使用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弄明白了)
C 寫了快十年了,全職幹了三四年 OC Swift,PHP Python Ruby 這些經常寫點小東西,用起來可比 Perl 簡單多了,目前工作主要是擼 Golang 也有小十萬了,連 Erlang 我都沒怕過,但是一看到 Rust 就傻眼了,這是給人看的么。
推薦閱讀:
※哪些書籍能提高程序員的演算法能力?
※創造編程語言應該學習什麼語言?設計編程語言最好是用C/C++嗎?
※函數式編程的函數是如何實現的?
※為什麼沒有中文的編程?
※除了 Go、Rust、Nim,還有哪些新編程語言更靠譜?