Rust是未來(lái)的5個(gè)理由
如果您正在尋找某種金屬面板業(yè)務(wù),請(qǐng)讓我澄清一下:我所指的Rust是一種編程語(yǔ)言。
還在那里?
當(dāng)我8歲開始學(xué)習(xí)編程語(yǔ)言時(shí),世界處于不同的狀態(tài),計(jì)算機(jī)更像是浪漫而神奇的盒子,而不是抖音如今使用的工具。
GW-Basic和C是我在可以直接訪問(wèn)內(nèi)存的時(shí)代從事計(jì)算機(jī)科學(xué)的第一門鏡頭,這是許多人的樂(lè)趣和他人的利益。 通過(guò)某些語(yǔ)言提供的合法構(gòu)造,對(duì)操作系統(tǒng)內(nèi)核進(jìn)行野蠻攻擊是如此容易。
> If this picture makes you nostalgic you are old enough to continue reading. If not, keep reading :
我在學(xué)術(shù)界的這些年一直以在后端系統(tǒng)中大量使用C(更少使用C ++)以及在計(jì)算機(jī)科學(xué)中實(shí)現(xiàn)常見且更奇特的算法為特征。 我博士的歲月大躍進(jìn) 其特點(diǎn)是大量使用C并指示編譯器減輕所有低級(jí)編程語(yǔ)言均會(huì)受到的討厭問(wèn)題,即直接訪問(wèn)內(nèi)存。 因此,諸如忘記忘記已經(jīng)釋放了內(nèi)存(雙重釋放),超出數(shù)組限制的讀取/寫入(緩沖區(qū)溢出),指向和訪問(wèn)無(wú)效內(nèi)存等問(wèn)題導(dǎo)致了我們所知的一些最嚴(yán)重的攻擊 迄今為止的計(jì)算機(jī)科學(xué)史。
那么這與Rust有什么關(guān)系呢?
事實(shí)上,Rust從字面上抹去了我大部分的博士學(xué)位。 一種新的編程范例。 而且我一點(diǎn)也不生氣。
在攻讀博士學(xué)位期間,我最雄心勃勃的目標(biāo)(不僅是我的目標(biāo)) 是要構(gòu)建一個(gè)編譯器來(lái)自動(dòng)修復(fù)內(nèi)存的雙重釋放問(wèn)題,緩沖區(qū)溢出和無(wú)效指針(有時(shí)甚至沒(méi)有通知開發(fā)人員最終要一遍又一遍地重復(fù)該討厭的錯(cuò)誤-這是什么意思?)。
Rust做到了這一點(diǎn):它通過(guò)引入一種新的方法將許多職責(zé)從開發(fā)人員轉(zhuǎn)移到了編譯器(對(duì)于Python程序員,編譯器就是您每次都寫得很好……Python便會(huì)放棄靈活性和性能。 編程范例。
在這樣的范例中,不可能有這些錯(cuò)誤。 編譯器只會(huì)拒絕繼續(xù)并生成有問(wèn)題的程序。 更加花哨的Rust編譯器的唯一副作用是,它肯定會(huì)使開發(fā)人員感到沮喪。 但是我沒(méi)有解決方案。 是時(shí)候再拿博士學(xué)位了?
Rust通過(guò)在編程語(yǔ)言設(shè)計(jì)中利用五個(gè)基本概念來(lái)提供如此出色的功能。 盡管有些緊密相關(guān),但讓我簡(jiǎn)要介紹一下它們。
借閱檢查器
Rust的借閱檢查器可確保引用(和指針!)不會(huì)超出它們指向的數(shù)據(jù)的壽命。 所有內(nèi)存不安全的錯(cuò)誤? 走了 "是的,但是伙計(jì)……我正在失去靈活性",您說(shuō)嗎? 不用擔(dān)心,您仍然可以使用不安全的Rust。 如果您覺得自己應(yīng)該承擔(dān)責(zé)任(并且您最好知道正在做的WTF),那就繼續(xù)吧,使代碼不安全并釋放一些超級(jí)功能。 好消息是,當(dāng)您遇到錯(cuò)誤時(shí)(伙計(jì)),您將確切知道在哪里查看。 還記得您寫過(guò)的并且感到如此自豪的不安全代碼嗎? 也許您想看看那里。
所有權(quán)
如果您不想整理房間,那么其他人(媽媽?)將不得不這樣做。 這將是有代價(jià)的(不要讓我去那里)。 為什么所有基于垃圾收集器的語(yǔ)言都比沒(méi)有垃圾收集器的語(yǔ)言慢,這是有原因的。 你猜怎么了? 所有權(quán)是一種編程范例,允許Rust以零成本跟蹤內(nèi)存(并在不再使用時(shí)釋放內(nèi)存)。 怎么樣? 通過(guò)改變程序員習(xí)慣于思考的方式(相信我,Rust迫使您思考的方式是正確的方式)。 瑣碎的
- let y = SomeType { field: String::from("hello") };
- let x = y;
- println!("{:?}", y); // This will fail. We no longer own y
將y的所有權(quán)移到x。 這意味著在該語(yǔ)句之后不能使用y。 這個(gè)簡(jiǎn)單的概念使編譯器可以為您管理內(nèi)存并使房間保持無(wú)可挑剔的狀態(tài)。
并發(fā)
這是一個(gè)很大的。 特別是由于在多核上分布計(jì)算的總體趨勢(shì)。 Rust不僅使并發(fā)變得容易(還相對(duì)容易,有時(shí)語(yǔ)法是b!tch)。 所有權(quán)和鎖定機(jī)制的結(jié)合使Rust中的并發(fā)性變得無(wú)所畏懼。 通道強(qiáng)制執(zhí)行線程隔離,并且數(shù)據(jù)受鎖保護(hù),并且僅當(dāng)持有鎖時(shí)才能訪問(wèn)數(shù)據(jù)。 這樣可以防止意外共享狀態(tài)。 數(shù)據(jù)爭(zhēng)用是不可能的(編譯器只會(huì)拒絕生成可能導(dǎo)致數(shù)據(jù)爭(zhēng)用的代碼)。
可移植性
Rust編譯器基于LLVM構(gòu)建,而LLVM可以為大量目標(biāo)平臺(tái)生成機(jī)器代碼。 盡管此級(jí)別的可移植性還不如C / C ++大,但請(qǐng)記住Rust僅10歲(剛開始編程時(shí)比我大一點(diǎn),多么可愛?)
速度與安全
如果要編譯器生成安全代碼,請(qǐng)準(zhǔn)備放棄性能。 低級(jí)安全社區(qū)意識(shí)到有多少代碼檢測(cè)技術(shù)可以使您的軟件變慢(以至于許多人更愿意將不安全的代碼換成高性能代碼)。 使用Rust,您可以同時(shí)擁有兩者。 Rust是一種編譯語(yǔ)言。 與C / C ++和其他編譯語(yǔ)言所產(chǎn)生的機(jī)器代碼一樣,所產(chǎn)生的機(jī)器代碼也可以進(jìn)行優(yōu)化(并且隨著編譯器變得更加智能,其優(yōu)化程度也會(huì)更高)。
至于速度,可以在此處找到不錯(cuò)的Rust與C的比較,并在此處進(jìn)行更詳細(xì)的說(shuō)明。 只需考慮在慣用的Rust和慣用的C之間進(jìn)行比較。不用說(shuō),糟糕的代碼性能不可能好,與選擇的語(yǔ)言無(wú)關(guān)。
當(dāng)然,這篇文章并不能給Rust帶來(lái)公義,因?yàn)镽ust提供了更多令人驚奇的東西。 盡管這是一種絕對(duì)要用于系統(tǒng)編程的語(yǔ)言,但是社區(qū)正以驚人的速度增長(zhǎng),并在純Rust中封裝了包和庫(kù)的crates.io出現(xiàn)了。 我要說(shuō)的是有很多重復(fù),很多圖書館似乎都被放棄了。 我相信這是由于許多開發(fā)人員和工程師最初的熱情所致,他們一直在對(duì)Rust進(jìn)行測(cè)試。
盡管發(fā)表了一些出版物,尤其是有關(guān)緩解緩沖區(qū)溢出的低級(jí)對(duì)策的出版物,但我堅(jiān)信Rust是未來(lái)的語(yǔ)言。 我還為使用Rust進(jìn)行數(shù)據(jù)處理的項(xiàng)目做出了貢獻(xiàn)(人們?cè)趶?fù)制和粘貼Tensorflow模型之前必須做的事情,我期待著盡快發(fā)布它。
參考:https://medium.com/@frag/5-reasons-why-rust-is-the-future-3e23adf0803b