Rust 學習筆記 - 緣起

緣起

現存語言的問題

不少語言都依然難以解決 內存安全 和 線程安全 兩個問題。前端

Rust 出現

06 年 Graydon Hoare 着手開發新的編程語言,名爲 Rust。 Rust 名稱源自 鏽菌(Rust Fungi)也有鐵鏽的意思,字形上柔和了 Trust 和 Robust 暗示 「信任」 和 「魯棒性」。程序員

GH 對於語言的指望

  1. 必須是更加安全,不易崩潰的,尤爲是在操做內存時,這一點更爲重要。
  2. 不須要有垃圾回收這樣的系統,不能爲了內存安全引入性能負擔。
  3. 不是一門僅僅擁有一個主要特性的語言,而應該擁有一系列的普遍特性,這些特性之間不乏一致性。這些特性能夠很好的相互協做,從而使愛語言更容易編寫、維護和調試,讓程序員寫出更安全、更高效的代碼。

Rust 應該是一個同時追求安全、併發和性能的現代系統級編程語言web

設計哲學

  • 內存安全
  • 零成本抽象
  • 實用性

內存安全

Rust 要保證內存安全首先要作的是保證類型安全。 類型安全有如下好處: - 容許編譯器偵測無心義甚至無效的代碼,暴露程序中隱含的錯誤。 - 能夠爲編輯器提供有意義的類型信息,幫助優化代碼。 - 能夠加強代碼的可讀性,更直白闡述開發者的意圖。 - 提供了必定程度的高級抽象,提高開發效率。編程

何爲內存安全

簡單講就是不會出現內存訪問錯誤。 當程序訪問未定義內存纔會產生內存錯誤,通常會出現一下集中狀況: - 引用空指針 - 使用未初始化內存 - 釋放後使用,也就是使用懸垂指針 - 緩衝區溢出,好比數組越界 - 非法釋放已是放過的指針或未分配的指針,也就是重複釋放數組

Rust 扥內存管理模型
- 全部權系統。每一個被分配到的內存都有一個獨佔期全部權的指針。只有當前指針被銷燬時,其對應的內存才能隨之被釋放。
- 借用和生命週期。每一個變量都有其生命週期,一旦超出生命週期,變量就會自動釋放。若是有借用,則能夠經過標記生命週期參數供編譯器檢查的方式,防止出現懸垂指針,也就是釋放後使用的狀況。
複製代碼
Rust 借鑑 Haskell 的特性
- 沒有空指針
- 默認不可變
- 表達式
- 高階函數
- 代數數據類型
- 模式匹配
- 泛型
- trait 和關聯類型
- 本地類型推導
複製代碼
爲實現內存安全,Rust 提供如下獨特特性
- 仿射類型(Affine Type),該類型用來表達 Rust 全部權中的 Move 語義
- 借用、生命週期.
複製代碼

零成本抽象

Rust 中零成本抽象的基石就是泛型和 trait。安全

實用性

如何評價一門編程語言的實用性
- 實踐性,首先必須可以應用於開發工業級產品,其次要易於學習和使用。
- 有益性,是指可以對業界產生積極的效果或影響。
- 穩定性,指語言自身要穩定。在解決同一個問題時,不會由於使用者不一樣而出現隨機的結果。
複製代碼
Rust 表現
  1. 實踐性markdown

    • 對於失敗的狀況,可使用斷言工具。
    • 對於錯誤,Rust 提供了基於返回值的分層錯誤處理方式,好比 Option 能夠用來處理可能存在控制的狀況,而 Result 就專門用來處理能夠被合理解決並須要傳播的錯誤。
    • 對於異常, Rust 將其看作沒法被合理解決的問題,提供了線程恐慌機制,在發生異常時,線程能夠安全地退出。
  2. 有益性和穩定性網絡

Rust 語言解決了內的村安全和併發安全的問題,能夠極大的提高軟件的質量。Rust 提供了 C 和 C++ 以外的更好選擇,由於 Rust 是對安全、併發和性能都很看重的語言,能夠用於嵌入式系統、操做系統、網絡服務等底層系統,也能夠用於 web 應用開發、遊戲引擎和集齊學習,webassembly 能夠用來開發前端組件。同時能夠用於區塊鏈技術。併發

相關文章
相關標籤/搜索