文章目錄
-
- 對 Rust 的一些值得一看的評論
- Rust 最與衆不同的特征 - Memory Management
- Rust 的優點
- Rust 的缺點
對 Rust 的一些值得一看的評論
- “對 Rust 語言的分析”:https://www.yinwang.org/blog-cn/2016/09/18/rust
- “回應王垠的《對 Rust 語言的分析》”:https://www.jianshu.com/p/31087b6b2b86
- “怎樣看待 Rust 語言 | 知乎”:https://www.zhihu.com/question/20032903
Rust 最與衆不同的特征 - Memory Management
Rust 語言在 system programming 領域之是以顯得特别與衆不同,最重要的一點就是整個 Memory Management 環節的設計:基于 Ownership + Borrowing + Lifetime 的 compile-time 記憶體管理。之是以說其與衆不同,是因為這與其他任何傳統 system programming 語言記憶體管理的機制選擇完全不同:
- C/C++:Let programmers manually manage pointers,and trust that programmers access them and free them correctly (otherwise will cause run-time errors)
- Java 等:Run-time GC
- Rust:基于 Ownership + Borrowing + Lifetime,(ideally) 不存在手動管理指針,但同時又是在 compile-time 時 borrow checker 就解析并插入合适的資源釋放 routine 進而不存在 run-time GC
而 Rust 也是在 MM 這一方面才展現出其最重要的設計理念:安全,同時快速。即能在編譯時檢查出幾乎所有安全問題,保證得到的代碼 run-time error 盡可能少(是以才有 Rust program 隻要通過了編譯就基本是語義正确的笑言),同時又沒有 GC 等等的運作時 overhead,對于編寫 system-level 的項目來說是一種重大的進步。當然,這種選擇也帶來一些弊端,下文也會提及。
Rust 的優點
個人認為 Rust 有如下 5 條優點,是作為最新的 system programming 語言,參考已有語言的缺陷和自己的哲學,綜合而來的:
- 基于 Ownership、Borrowing、Lifetime 的記憶體管理機制,如上節所述,是 Rust 最獨特的特征,是實作 compile-time 安全性、盡可能減少 run-time error,同時保證運作高效的根基
- 基于
&Option
的空值和錯誤處理,保證了代碼清晰的情況下,對空值和錯誤全面而安全地處理,也是 Rust 減少 run-time error 的重要保障之一Result
- 基于 Traits 的簡潔而強大的 Generic 範型系統,文法簡潔、清晰,沒有備援(帶上複雜 Lifetime 之後似乎稱不上清晰了…,但還是好過很多語言),也是 Rust 減少 run-time error 的重要保障之一
- 優秀的 Macro 宏定義機制,作為一門 system programming 語言,實作了相對比較強大的 meta-programming 能力,使代碼簡潔易懂,減少常用功能的代碼備援
- 完整、易用的工具鍊 & 凝聚力異常高的社群,使用 Cargo 做項目依賴管理,統一管理的社群 Crates hub(https://crates.io/),以及清晰的教程、完整而易讀的文檔
可以說,Rust 是一個好學生,學習到已有 system language 的各種不足,如 C/C++ 雖自由卻讓人頭疼的 segfaults,Java 飽受诟病的 VM 和運作時 GC 的低效等,進而創造出一種新的語言設計哲學,走出一條與衆不同的個性化的路線。正因如此,Rust 雖然不簡單、領域相對小衆,也能長居 Stackoverflow 最受喜愛的語言調查的榜首1。
Rust 的缺點
同樣的,好學生往往有自己的偏執的一面,不會是完美的,也有許多的缺陷。
- 與 C 的哲學(C Primer 中所言:完全信任 programmer,給予你充分的實作自由,但需要細心、嚴謹、有經驗去實作,否則 segfault / memory leak 可以 de 到哭)截然相反,為了做到編譯時捕捉大部分錯誤,給予了 programmer 很少的自由,真正觸及底層的時候不得不用
/ 暫時還無法有效實作,有時會令人感到束手束腳unsafe
- 不得不引入一些複雜規則(如 Lifetime)來 enable 它的 MM 設計,使得真正複雜 Rust 項目中的 coding 說不上很簡潔,更說不上很易懂
- 上手需要對 CA、PL、OS 的充分了解和傳統 system language 的足夠經驗,才能了解 Rust 的很多設計;萌新上來就學習 Rust 至少對我來說是完全不行的,反而一知半解,不了解為什麼要設計成這個樣子
- Rust 把對 programmer 的時間要求從 debugging / performance tuning 上轉移到了 “學習 Rust” 的過程上,在這個語言選擇和項目疊代愈發靈活快速的時代,我不是很确定這是件好事還是壞事
- https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages ↩︎