為嵌入式系統學習 Rust

更多網際網路精彩資訊、工作效率提升關注【飛魚在浪嶼】(日更新)

為嵌入式系統學習 Rust

VolksEEG專案(開源專案,其目標是建立

腦電圖

(EEG) 機器)正在考慮使用 Rust 作為嵌入式系統程式語言。大多數程式設計師主要是 C/C++ 嵌入式開發人員。Feabhas的這個演講 介紹嵌入式系統的 Rust,https://www。youtube。com/watch?v=ojEXMM_1bVA 。

改用一門新語言的風險之一是學習曲線,尤其是錯誤曲線。每當學習一門新的程式語言時,都必須克服一系列新手錯誤。這只是學習過程的一部分,它們很有教育意義。但這需要時間。

Rust 團隊審視了過去 70 年的所有程式設計錯誤(例如 Tony Hoare 的“十億美元錯誤” https://www。infoq。com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/等 ) 並

實際吸取了教訓,

並做到了,這樣你就不會在 Rust 中犯那些錯誤。

它體現了 宏偉抱負:“如果你想要更高效的程式設計師,他們不應該浪費時間除錯,他們不應該一開始就引入錯誤。”

在 Rust 中,看到了來自 C、C++、Python、Go、Java、Javascript 和 Erlang 的 DNA好的部分。包括導致了持續的程式設計世界的問題(空指標崩潰,懸空指標記憶體洩漏,緩衝區溢位任何人?垃圾收集停頓,競爭條件,死鎖),Rust 團隊做出了設計選擇來減輕或完全消除這些問題。

你還能在 Rust 中犯錯誤嗎?當然。但是所有類別的問題都被消除了。這使得它本質上更安全、更可靠。而且

在不

犧牲效能的前提下。

另一個問題是語言可能難以學習。但Rust有足夠多的熟悉的 DNA,大多數有經驗的開發人員應該能夠很容易地掌握它。設計和抽象與語言無關。其餘的只是語法。

當然,有一些新規則和一些語法上的奇怪之處。Rust的意思是一些調整。但好處有可能是巨大的。但想想節省的時間,獲得的成功上線時間,避免客戶的噩夢。

所以花點時間瞭解學習曲線。這看起來是一項值得的投資。

概念圖

乍一看,Rust 中有很多新概念需要消化,但在許多情況下,它們與其他語言很相似,只是使用了不同的方法和術語。Rust 團隊確實做出了一些具有連鎖反應的明確設計選擇,但它們仍然符合熟悉的概念。

快速瀏覽熱門特性列​表:

所有權和借用:

這些是 Rust 中的一流概念,對其提供的安全性至關重要。這包括用於覆蓋編譯器預設值的顯式生命週期註釋。任何瞭解 C++ 智慧指標、引用和移動語義的人都熟悉它們。

特性Traits:

這些類似於面嚮物件語言中的介面、抽象類和虛擬函式。它們提供多型性,滿足開閉原則。

沒有繼承,只有組合:

不同的設計選擇,但仍然提供多型性。

RAII:

Resource Acquisition Is Initialization

意味著當一個變數超出範圍時,它的解構函式被呼叫並釋放它的資源。那是直接內建的。你可以實現

drop

trait 在發生這種情況時呼叫程式碼;Kevin 使用它來將記憶體序列化/反序列化到/從磁碟來實現持久變數,而無需考慮它。

泛型:

C++ 模板。

沒有異常:

使用錯誤處理和解包替代。

屬性Attributes:

這些類似於編譯器和預處理器指令。

Unsafe機制:

可以呼叫其他語言的程式碼,但根據定義,這是不安全的,因為編譯器無法執行其規則。因此,

不安全的

註釋使這一點變得明確,並允許繞過編譯器保護。

Cargo:

包管理器和構建系統。

嚴格的編譯器:

編譯器非常嚴格。C 編譯器非常寬容(“這是一把上膛的槍。儘量不要用它射擊。”)還有 Javascript?好吧,Rust 編譯器採用了不同的方法,並且在執行其規則以維護其安全保證方面更加嚴格。

構建型別:

釋出

除錯

測試

構建都是一級的概念。無需使用構建系統來獲得所需的構建。

學習資源

交替使用影片和書面材料(以 2 倍速度觀看並略讀書籍以提高深度和廣度)。影片將引導你完成熟悉特定主題,然後書籍提供額外的教程和參考材料。一旦完成大規模的概覽總結,你就會知道從何處回來開始精讀。

我總是喜歡從多種資源中學習,因為每一種資源都有不同的視角、重點和覆蓋面。

Rust 的主要站點是 https://www。rust-lang。org/。它包括 Learn Rust(https://www。rust-lang。org/learn),下面列出的幾本線上書籍來自其中。

這個列表從語言基礎開始,然後專門轉向嵌入式系統開發。

影片: Rust速成課程,作者 Brad Traversy。這是一個很棒的快速導覽,它向初學者介紹了許多概念。https://www。youtube。com/watch?v=zF34dRivLOw

影片系列: Rust 教程,由 Doug Milford 編寫。這是更長的影片,一個很好的更詳細的教程。https://www。youtube。com/playlist?list=PLLqEtX6ql2EyPAZ1M2_C0GgVd4A-_L4_5

書: 《

Beginning Rust: From Novice to Professional

》,

線上書籍: 《The Rust Programming Language》,https://doc。rust-lang。org/book/title-page。html。與《

Beginning Rust》 的

重點略有不同,並涵蓋了一些其他主題。

線上書籍: Rust by Example (RBE)(https://doc。rust-lang。org/rust-by-example/index。html)。一組可執行的示例,用於說明各種 Rust 概念和標準庫。

影片: Rust 測試和 TDD - 測試和測試驅動開發簡介,由 Tensor 提供。https://www。youtube。com/watch?v=2vBQFIWl36k

影片: 嵌入式 Rust 生態系統概述,作者 Frans Skarman。https://www。youtube。com/watch?v=vLYit_HHPaY 對嵌入式系統 Rust 的精彩介紹,包括系統包架構。

線上書籍: 嵌入式 Rust 書籍。https://docs。rust-embedded。org/book/intro/index。html

影片: RTIC:實時中斷驅動併發,作者 Emil Fresk。RTIC 是一個簡單的排程執行程式,就像輕量級 RTOS 和帶中斷的裸機超級迴圈之間的交叉。

線上書籍: RTIC:實時中斷驅動的併發。https://www。youtube。com/watch?v=saNdh0m_qHc

影片: Rust 安全關鍵系統小組,https://www。youtube。com/watch?v=g7VVM_t72NE。這影片有點長,但它討論了嵌入式和安全關鍵系統的許多相關問題,並提供了一些有趣的花絮。

影片: https://www。youtube。com/watch?v=SNUklwUi_M4。這是另一個關於嵌入式系統中 Rust 的有趣討論的影片。

部落格文章: http://trevorjim。com/what-weve-got-here-is-a-failure-to-communicate/,作者 Trevor Jim。

將 OpenOCD 與基於 ST-Link、J-Link 或 CMSIS-DAP 的探針一起用於除錯嵌入式系統。嘗試 Rust 的probe-rs。https://probe。rs/

https://ferrous-systems。com/

,以及https://github。com/rust-embedded/wg都值得一讀。