嵌入式開發:用于嵌入式系統的Rust
在嵌入式開發中,到目前為止,C/C++已經主導了系統編程。開發低錯誤和安全的軟件是一項重大挑戰。Rust語言是唯一成功的候選語言。與C++相比,它更專注于避免編程錯誤,而不會帶來過多的復雜性。
但是,當查看常見編程語言排名時,發現已經有無數種語言在廣泛使用。這是因為每種語言都有不同的目標群體、不同的應用領域或不同的質量特征。因此,在軟件開發中有許多語言的空間。
在傳統嵌入式系統的情況下,它主要涉及系統編程語言,即開發對資源具有最大控制的低級軟件。該軟件通常是任務關鍵型的,有時必須滿足實時或安全領域的特殊要求。
系統編程
在系統編程中,語言C和C++已經主導了幾十年。C已經快50歲了,長期以來一直是許多系統的骨干。在嵌入式開發中,如果沒有用C語言編寫的軟件,通用操作系統、內部組件和硬件相關驅動程序在今天仍然是不可想象的。嵌入式系統也不例外。對C的支持是所有平臺上最低的共同點。
隨著C++的進一步發展,更大的軟件和更復雜的概念可以更好地實現。然而,C語言采用了所有語言,并面臨著相關的挑戰。C程序員總是需要確切地知道自己在做什么。謹慎和紀律對于避免許多危險的絆腳石至關重要。雖然處理器體系結構和內存結構的抽象幾乎不存在,這為系統編程語言提供了前提,但不幸的是,這也會導致容易出錯,因為編譯器允許大量代碼通過。
C語言的已知問題,如緩沖區溢出、懸空指針、競爭條件、未初始化內存或未定義行為,通常只在運行時檢測到,這些問題通常是隨機發生的。這使得通過測試更難檢測到它們。在嵌入式開發中,使用C++而不是C只能在有限的程度上有所幫助,因為新的抽象和封裝方法只能很容易地繞過,而且該語言還引入了新的障礙(例如不需要的復制構造函數),這些障礙同樣危險,甚至更隱蔽。
另一個問題是C++的語言復雜性,它隨著每個新版本的增加而增加,并且早就把其他主流語言拋在了后面(見圖1)。因此,掌握C++需要越來越多的經驗,編寫低錯誤軟件需要足夠的紀律。在現代世界中,軟件扮演著越來越重要的角色,網絡安全無從談起,在可接受的時間內實現軟件而不出錯已變得至關重要。因此,需要系統編程的后繼語言。
C/C++后繼者的要求
在測試過程中很容易檢測到簡單、明顯的錯誤。在嵌入式開發中,更難檢測的bug更隨機,通常來自內存安全、線程安全或未定義的行為。這是需要向前邁出一大步的地方。編程語言應在關鍵點允許盡可能少的錯誤。癥狀控制(審查、測試、更新)不再足以解決棘手的問題。
由于這仍然是關于嵌入式系統的,因此也是關于系統編程的,因此將缺少一種避免困難bug的高級方法(例如垃圾收集器、自動并行化、強抽象)。強制運行時環境需要開銷和許多依賴性,不適合裸機軟件的面向硬件編程,嵌入式系統通常就是這樣。
在嵌入式開發中,C/C++后繼者的其他要求當然是支持現代范式(包括功能)、與現有C代碼的輕松集成以及帶來豐富的生態系統,即工具、開發環境和社區。