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