可信而可靠,關(guān)于Rust 的學(xué)習(xí)
最早接觸到Rust是在幾年前的一次技術(shù)大會(huì)上, 黃東旭說TiKV 是用Rust 語言編寫的, 引起了我的一些興趣,但只是保持關(guān)注而已。我一直認(rèn)為每一種編程語言都有著各自的典型應(yīng)用領(lǐng)域, 也有著各自的編程范式,沒有最好的編程語言(參見《PHP是最好的編程語言嗎?》), 但存在最適合當(dāng)前的問題領(lǐng)域的編程語言。
個(gè)人認(rèn)為,所謂全棧工程師,至少要掌握4種編程語言——C/C++,Java, JavaScript 和Python。作為一個(gè)半吊子全棧工匠,我還涉足過Go,Scala,Erlang,PHP和Perl,Shell 編程是必備技能,不放在編程語言的行列。

直到去年,自己進(jìn)入操作系統(tǒng)的研發(fā)領(lǐng)域,尤其是與操作系統(tǒng)內(nèi)核相關(guān)的那些工作,才著手系統(tǒng)地學(xué)習(xí)Rust編程語言。C/C++ 一直是系統(tǒng)編程的首選,但由于內(nèi)存安全、數(shù)據(jù)競爭等引起的問題一直存在,每一次對內(nèi)核的修改嘗試都有些畏首畏尾,而Rust 就是為了從語言層面解決這些問題而誕生的。Rust 的設(shè)計(jì)哲學(xué)是內(nèi)存安全、零成本抽象和實(shí)用性。
尤其是,2022 年 12 月 11 日發(fā)布的 Linux Kernel 6.1,最重要的變化是引入了初始的 Rust 框架代碼。但高達(dá) 12k 行的代碼僅帶來了 Rust 基本的基礎(chǔ)設(shè)施。有了這個(gè)基礎(chǔ),新的驅(qū)動(dòng)程序、子系統(tǒng)和內(nèi)核模塊有望通過 Rust 編程語言登陸內(nèi)核。Rust 進(jìn)入 Linux 內(nèi)核,對于 推動(dòng) Rust 進(jìn)化具有很重要的戰(zhàn)略意義。另外,今年5月的這條消息也證明了自己的選擇存在一定的正確性。

Rust 宣稱可以“賦予每個(gè)人構(gòu)建可靠高效的軟件的能力” , 而我更關(guān)注在實(shí)現(xiàn)對系統(tǒng)安全編程的同時(shí)對底層有控制權(quán) 。Rust 沒有運(yùn)行時(shí)和垃圾回收器,可以提供對性能要求很高的服務(wù),可在嵌入式設(shè)備上運(yùn)行,也可以很方便地和其他語言集成。對比 C、C++ 和 Go, Rust 的性能和 C++ 接近,快于 Go。
安全編程是最吸引我的地方。在2020 年 8 月, Rarf Jung 在他的博士論文中提供了第一個(gè)正式證據(jù)(RustBelt),證明了 Rust 的安全承諾成立 ,即使開發(fā)者有可能編寫“不安全”代碼,Rust 的安全聲明仍然有效 。具體而言,Rust采用了所有權(quán)類型系統(tǒng),每個(gè)被分配的內(nèi)存都有指針,且給每個(gè)變量都設(shè)定了生命周期,一旦超出生命周期,變量就會(huì)被自動(dòng)釋放。另外, Rust劃分了安全邊界,如果要做內(nèi)存不安全的事情,必須在代碼中明確聲明。就線程而言,由于采用 1:1 線程模型,不需要運(yùn)行時(shí),在一定程度上消除了數(shù)據(jù)競爭的現(xiàn)象。

客觀而言,Rust 的學(xué)習(xí)曲線還是相對陡峭的?;谒袡?quán)系統(tǒng)來管理內(nèi)存,移動(dòng)(move)、借用(borrow)、生命周期(lifetime)等概念提供了很多抽象表達(dá)能力,這需要較強(qiáng)的理解能力,對初學(xué)者確實(shí)存在挑戰(zhàn)。內(nèi)存模型嚴(yán)格區(qū)分可變狀態(tài)和不可變狀態(tài),頗有一些Erlang的味道,這需要新的編程范式。Rust 擁有非常嚴(yán)格的靜態(tài)類型系統(tǒng),這就要求寫程序時(shí)需要細(xì)致地設(shè)計(jì)數(shù)據(jù)類型。另外,相對于C/C++,Java,Python等成熟語言而言,Rust 的生態(tài)系統(tǒng)還在成長中,存在較多不完整的地方。

當(dāng)自己開始體會(huì)到“Rust”的一些味道的時(shí)候,有幸參與了《Rust 程序設(shè)計(jì)(第二版)》審讀。因?yàn)樽约阂卜g過幾本書,一看到書籍的頁數(shù)就知道這本書的翻譯是一件艱難的工作。進(jìn)而,我從稿件的內(nèi)容中看到了譯者滿滿的誠意。譯者雪狼那25年碼農(nóng)的經(jīng)歷和我有著太多的相似,他前前后后對稿子修訂了 7 遍,雖然每一遍的重心有所不同,但每一遍都耗費(fèi)了巨大的心血。很長一段時(shí)間內(nèi),獨(dú)立進(jìn)行翻譯的雪狼每一天都會(huì)是挑燈夜戰(zhàn),向譯者雪狼致敬!
審讀群里高手很多,我不過是一個(gè)Rust的初學(xué)者,談不上審讀,更多是學(xué)習(xí)和疑問,尤其是向雪狼和群里的各位老師學(xué)習(xí)。對于《Rust 程序設(shè)計(jì)(第二版)》書中的內(nèi)容,頗有相見很晚的感覺,這本書的思維導(dǎo)圖如下:

跟著書中講解的思路走,一步步來,就一定能掌握 Rust 的核心特性和在工作場景中的用法。書中的代碼是開源的,而且基于 Rust 2021。如果我能夠早學(xué)習(xí)這本書,可以避免自己走很多的彎路。
鑒于自己的認(rèn)知局限,如果你是操作系統(tǒng)的相關(guān)開發(fā)工程師, 或者是嵌入式系統(tǒng)的工程師,亦或是后端服務(wù)的工程師,Rust 都會(huì)帶來安全而可靠的開發(fā)效果, 《Rust 程序設(shè)計(jì)(第二版)》將會(huì)成為你的案頭手冊!

【參考資料與關(guān)聯(lián)閱讀】
學(xué) Rust 最好的圖書之一,原版豆瓣 9.7分“封神之作”,https://mp.weixin.qq.com/s/oTgyQ1d7hSTlVDEVrAahKQ
Rust 生態(tài)發(fā)展之路, https://mp.weixin.qq.com/s/0wfKzkT6PhdxIRDMmwYezw
Rust 官方網(wǎng)站 https://www.rust-lang.org/
Rust (programming language) - wikipedia https://en.wikipedia.org/wiki/Rust(programminglanguage)
Computer Scientist proves safety claims of the programming language Rust - Eurekalert https://www.eurekalert.org/news-releases/610682
R. Jung, Understanding and Evolving the Rust Programming Language https://people.mpi-sws.org/~jung/phd/thesis-screen.pdf
