邂逅
周五在圖書館瀏覽新到圖書時(shí)發(fā)現(xiàn)有幾個(gè)RUST語言的書喊暖,聽旁邊的曉旭說這個(gè)語言隱隱有替代C的趨勢撕瞧,頓時(shí)對這個(gè)從來沒有聽說過的語言產(chǎn)生了好奇。翻了翻書丛版,才知道該語言已經(jīng)在很多項(xiàng)目中使用到了,特別是區(qū)塊鏈相關(guān)的領(lǐng)域页畦,RUST的安全、快速豫缨、開發(fā)效率非常適合區(qū)塊鏈項(xiàng)目的要求。我本人對區(qū)塊鏈非常不感冒好芭,也因此而遲遲沒有接觸到這門語言。
程序員的特質(zhì)也各個(gè)不同舍败,有的程序員喜歡追逐新鮮的事務(wù),看到新出現(xiàn)或者之前未了解過的語言瓢颅,會(huì)顯示出比較大的興趣(當(dāng)然更多的時(shí)候是淺嘗輒止)弛说;有的程序員更傾向于修煉內(nèi)功心法翰意,認(rèn)為語言只是工具,對系統(tǒng)與網(wǎng)絡(luò)的深入理解才是真正的技術(shù)所在冀偶。后者往往從事的底層系統(tǒng)開發(fā)工作,使用C語言稠曼,摒棄花里胡哨的技巧并以此為傲客年。
C語言質(zhì)樸無華漠吻,重劍無鋒司恳。在C語言的世界里,錘子就是錘子扔傅,釘子就是釘子耍共,它們就是你直觀上看到的最本質(zhì)的形態(tài)猎塞。然而我們往往要用這些最簡單的工具來構(gòu)造最復(fù)雜的系統(tǒng)。C給了程序員無上的權(quán)利荠耽,程序員可以隨意訪問內(nèi)存钩骇,可以操縱硬件。然而這些權(quán)利帶來的可不是快感骇塘,而是指針亂飛、內(nèi)存泄露款违、棧溢出的恐懼唐瀑。當(dāng)一個(gè)指針流轉(zhuǎn)到程序員指尖的時(shí)候,估計(jì)他馬上就能體會(huì)到“能力越大責(zé)任越大”這句話的含義哄辣。當(dāng)我們看到一個(gè)C程序員仔仔細(xì)細(xì)計(jì)算著指針偏移,哆哆嗖嗖操作著線程寫著并發(fā)代碼的時(shí)候赠尾,我們只能報(bào)以敬意與同情的目光力穗,默默的為他祈禱。
Rust設(shè)計(jì)哲學(xué)
RUST或許是C語言程序員的另一種選擇气嫁。我們選擇C語言,或許是因?yàn)樗峁┝藷o可比擬的高效性寸宵,也或許是因?yàn)樗鼰o所不在的可移植性崖面。RUST就是為了那些既渴望速度(編碼與運(yùn)行)又渴望穩(wěn)定與快感的程序員設(shè)計(jì)的;它打破了我們固有的偏見梯影,告訴我們實(shí)現(xiàn)底層平臺(tái)功能的語言工具巫员,也可以做到高效的開發(fā)效率與穩(wěn)定的代碼質(zhì)量。使用RUST甲棍,或許能讓我們明白简识,代碼不一定要依賴強(qiáng)大的測試或者有經(jīng)驗(yàn)的“老師傅”來把關(guān),通過語言自身,就可以把大部分的問題擋在門外奢赂。
任何事物都需要為自己的存在找到理由和位置,Rust語言設(shè)計(jì)就是為系統(tǒng)工程師尋找到”安全戳寸、性能“這兩者的最佳平衡點(diǎn)。在Rust的設(shè)計(jì)理念里袖瞻,內(nèi)存使用應(yīng)當(dāng)是安全的,但是又不能因?yàn)閮?nèi)存安全而犧牲掉性能(如GC)拆吆;同時(shí)語言應(yīng)當(dāng)具備高效的開發(fā)效率枣耀,它的表達(dá)方式應(yīng)當(dāng)是易于理解捞奕,符合人類思維和抽象習(xí)慣的牺堰。簡而言之,Rust想要的是Java的開發(fā)效率颅围,C的執(zhí)行效率院促,還能兼顧有其他語言的優(yōu)秀表達(dá)方式,以及安全的內(nèi)存常拓、并發(fā)開發(fā)保證渐溶。由此總結(jié)Rust的設(shè)計(jì)哲學(xué)三大件:內(nèi)存安全;零成本抽象弄抬;實(shí)用性茎辐。
Rust語言的設(shè)計(jì)與發(fā)展融合了當(dāng)下眾多語言的優(yōu)質(zhì)特性,這就是一門新語言的發(fā)展優(yōu)勢所在掂恕。比如從C++借鑒了RAII機(jī)制荔茬,從Haskell借鑒了泛型、表達(dá)式等竹海。當(dāng)然Rust也有基于自身設(shè)計(jì)目標(biāo)而發(fā)展出來的獨(dú)有特性如仿射類型、借用丐黄、生命周期等斋配,它還重新審視了錯(cuò)誤處理機(jī)制,幫助程序員更合理的處理異常,提升程序健壯性艰争。然而這種到處借鑒雜糅的特性集也讓許多有經(jīng)驗(yàn)的程序員無法適從坏瞄。有經(jīng)驗(yàn)的程序員會(huì)潛意識(shí)的把語言特性映射到熟悉的語言身上以幫助自己理解,但是遇到Rust甩卓,你能看到許多自己能夠?qū)?yīng)上的知識(shí)點(diǎn)鸠匀,也必然能看到許多生疏的表達(dá)方式和使用技巧;或許這些會(huì)讓你覺得不自在甚至稍許驚慌逾柿,但是熟悉以后缀棍,自身也能得到很大的成長。Rust編譯器非常強(qiáng)大机错,它是我們代碼安全的重要保障爬范,但也讓許多初學(xué)者覺得迷惑,因?yàn)楹芏嗔?xí)慣性的寫法弱匪,Rust編譯器上可能會(huì)給你一個(gè)編譯失敗的結(jié)果青瀑。很多人都說Rust的學(xué)習(xí)曲線非常陡峭,或許我們更應(yīng)該從擺正自己的學(xué)習(xí)心態(tài)萧诫,清空存量思維斥难,用心接納和理解Rust的設(shè)計(jì)哲學(xué),把Rust當(dāng)做自己的朋友帘饶,而不是拿它和自己較勁哑诊。
社區(qū)
Rust是一門典型的草根創(chuàng)造的語言,它由一位Mozilla工程師Graydon Hoare在2006年創(chuàng)造.我非常喜歡這種草根式(非學(xué)院派)的創(chuàng)造發(fā)明尖奔,它往往是從工作者自身的觀察角度出發(fā)搭儒,解決的也是工作者自身最痛的痛點(diǎn)。這樣的項(xiàng)目非常容易引起共鳴提茁,天生就適合社區(qū)方式發(fā)展成長淹禾。實(shí)際上Rust語言自身就是一個(gè)明星開源項(xiàng)目(https://github.com/rust-lang/rust),而且社區(qū)化運(yùn)作已經(jīng)非常成熟茴扁,有完備的文檔铃岔,具體的工作組分工,有完整的標(biāo)準(zhǔn)制定流程峭火,版本發(fā)布的節(jié)奏也穩(wěn)定下來毁习。
學(xué)習(xí)理解和使用Rust最好的方式,當(dāng)然就是參與到Rust開源社區(qū)中卖丸,閱讀開源社區(qū)代碼纺且,加入開源項(xiàng)目。Rust語言本身的官方開源項(xiàng)目在Github地址為https://github.com/rust-lang稍浆,大家如果對語言本身的開源代碼感興趣载碌,可以去查閱這個(gè)項(xiàng)目的代碼猜嘱。個(gè)人比較感興趣的項(xiàng)目有Redox(https://github.com/redox-os/redox),一個(gè)用Rust實(shí)現(xiàn)的操作系統(tǒng)項(xiàng)目嫁艇。項(xiàng)目本身還非常弱小朗伶,很多功能都在起步階段,但是學(xué)習(xí)和加入該項(xiàng)目步咪,對我們深入理解系統(tǒng)原理论皆,學(xué)習(xí)Rust語言都非常有益。該項(xiàng)目的網(wǎng)絡(luò)協(xié)議棧使用了另一個(gè)Rust開源項(xiàng)目Smoltcp(https://github.com/m-labs/smoltcp)猾漫,我對網(wǎng)絡(luò)協(xié)議棧更有興趣点晴,Smoltcp會(huì)成為我主要的學(xué)習(xí)對象,或許我會(huì)重點(diǎn)看看TCP算法和IPv6協(xié)議棧静袖。
在開源世界里觉鼻,社區(qū)大于代碼本身,如果我們只關(guān)注Rust語言本身队橙,那是緣木求魚舍本逐末坠陈。我認(rèn)為更多的是要參與到社區(qū)的討論中,理解社區(qū)的思想捐康,加入到他們的思維碰撞中仇矾。以前我們總覺得自己在開源的門外,那是因?yàn)槲覀冏陨淼乃枷刖驮陂_源的門外解总。只有自己的思維參與進(jìn)去了贮匕,我們才能真正把開源落實(shí)到行動(dòng)。