Rust的記憶安全能力使它成為一種令人興奮的語言,但正如生活中的許多事情一樣,說起來容易做起來難。雖然Rust是一個有趣的語言選項,但至少有五個顯著的障礙阻止了它在嵌入式開發中的采用。讓我們探索其中的一些障礙。
障礙1——商業支持
如今,大多數開發嵌入式產品的團隊都利用商業支持工具來加速開發。例如,你的微控制器供應商可能會為你提供低級驅動程序、文件系統、RTOS、配置工具等等。這些提供的工具可以幫助你通過為你完成底層提升來加速開發。到目前為止,只有少數微控制器供應商(這是慷慨的)支持Rust。他們仍然在為他們的客戶,你和我,提供對C的支持。除此之外,我們只能靠自己。
開發人員可以使用一些工具,如svd2rust,將指定微控制器外圍設備的SVD文件轉換為外圍機箱。該工具可以很好地創建嵌入式開發人員可以使用的機箱,但它確實存在潛在問題,例如:
l質量的顯著差異取決于供應商
l生成的詳細而復雜的代碼
l缺少可能導致調試時間延長的錯誤消息
l缺乏可配置性,這是一種一刀切的方法
l它使用泛型和元編程可能會導致更長的編譯時間
如果供應商不提供支持,那么就要靠你和你的團隊來解決問題。雖然這可能令人興奮,并帶來許多經驗教訓,但它可能會對產品時間表和預算產生負面影響。
障礙2——培訓成本
Rust不是一門微不足道的語言。雖然它與之前的許多語言(包括C語言)有著共同的想法和概念,但學習曲線更陡峭。當一家公司希望采用一種新語言時,他們會雇傭已經知道這項技術的工程師,或者培訓他們的團隊。對嵌入式使用Rust感興趣的嵌入式開發團隊將發現自己身處一個小型利基社區。在這個社區中,沒有多少合格的嵌入式軟件工程師了解Rust。這意味著要為少數了解Rust的開發人員支付溢價,或者投資培訓現有的內部團隊。
訓練一個團隊使用Rust并不是一個壞主意。然而,從一種編程語言轉換到另一種編程編程語言必須為公司提供投資回報。尤其是當切換到像Rust這樣不成熟的語言時。結果必須帶來投資回報,比如更好的安全性、更強大的系統等。希望使用Rust的團隊應該客觀評估Rust是否是正確的選擇。
障礙3——保守地采用技術
你有沒有注意到新技術在嵌入式開發環境中被采用的速度有多慢?在設計物理產品與純應用程序時,風險與安全、制造和適當的功能有關。使用純應用程序,投訴會導致24小時軟件更新。
以實物產品為基礎的企業往往面臨更高的失敗風險。因此,企業主和管理者往往更厭惡風險,并選擇他們知道行之有效的技術。(看看太空飛行器發射業務。它們因為避險而停滯了多久?)。此外,還經常對現有技術、工作流程和人才進行投資。對于一家已建立的企業來說,變革的成本可能是巨大的,而獲得的收益卻很小。如果你是一家小型初創企業,你還沒有最初的投資,所以采用一項新技術很有意義,因為你無論如何都必須建立你的技術基礎設施和流程。
失敗的風險通常會促使企業使用風險較低的可用技術來實現其業務目標。因此,許多公司可能會考慮Rust,并決定使用C或C++,因為采用Rust這樣的新技術并不能比行業中已經建立的技術帶來任何真正的好處。
障礙4–工具鏈集成
如今,許多嵌入式開發人員已經構建了系統、工作流程和工具,他們以集成的方式使用這些系統、工作流和工具來開發嵌入式軟件。使用Rust將迫使開發人員重新思考和返工他們的整個開發過程,因為Rust可能無法很好地使用這些現有的工具鏈。
你可能會發現,雖然新Rust似乎是一條很好的道路,但它可能會導致你倒退,在開發新工具和技術時,失去對系統的了解。結果可能還可以,但我們都知道,失去時間就是失去機會。
障礙5——缺乏標準化
C和C++有一些標準,你可以去了解什么是官方支持的語言,什么不是。Rust沒有正式的規范或標準。Rust語言團隊指導語言設計,所有更改都經過一個已建立的征求意見(RFC)過程。RFC和Rust文檔有效地充當了該語言的非正式規范。
如果沒有正式的語言規范,Rust在安全關鍵應用程序和其他領域的商業支持將不存在。Rust編譯器被稱為rustc,是免費的開源編譯器,但沒有商業版本。Rust社區開發編譯器,Rust團隊監督其開發。雖然這似乎不是什么大不了的事,但缺乏標準化意味著Rust可以輕而易舉地改變方向。雖然這對進步和創新很有好處,但對那些依賴產品一致性的嵌入式用戶來說就不太好了。
結論
作為一個行業,這些障礙將是Rust不會被快速采用的重要因素。也有一些公司采用它并取得成功,也會有其他人接受它并失敗。
Rust是一種令人興奮的語言,希望它能慢慢獲得市場份額。然而,在接下來的五年里,還是會有更多的嵌入式開發團隊采用C++,而不是Rust。