用 Rust 拯救 60 歲老程序員:用 Ada 寫了幾十年的飛機程序,現(xiàn)在終于可以改用 Rust 了
發(fā)布時間:2023-09-04 14:01:30
針對具有更高安全需求的行業(yè),AdaCore 表示將為其 Rust fork 提供長期支持。
對于安全問題較為重視的行業(yè)如今都對 Rust 語言抱有興趣,就連微軟最近也承認 Rust 可能是安全系統(tǒng)編程的最佳選項。但對于汽車、航空航天及國防等其他行業(yè)來說,開源語言那快速變化的特性又總會讓人望而卻步。
AdaCore 公司專門為這些比較特殊的行業(yè)提供軟件開發(fā)與驗證工具。AdaCore 最初誕生時專門支持 Ada 語言——這是一種由美國國防部于上世紀 80 年代初開發(fā)的編程語言,用以替代更早那些復(fù)雜且極易出錯的語言。
AdaCore 公司產(chǎn)品經(jīng)理兼技術(shù)策略師 Tony Aiello 表示,“從意愿上講,人們其實越來越渴望把 Rust 引入那些以安全認證為重點的長期項目當中。我們感受到了這波趨勢,也從客戶那里了解到不少需求。他們目前的主要顧慮是當下的開源工具發(fā)展太快,而能夠從開源社區(qū)處獲取到的專業(yè)支持還不完善,導(dǎo)致他們遲遲不敢在 Rust 上邁出這重要的一步。”
Aiello 這里說的顧慮,是指客戶擔心開源選項不能像傳統(tǒng)服務(wù)商那樣在幾天內(nèi)修復(fù) bug,或者幫助企業(yè)解決工具鏈中可能出現(xiàn)的深層技術(shù)問題。他承認,大多數(shù)開源項目都無法在幾天之內(nèi)響應(yīng)上報的問題。
“但這種快速響應(yīng)能力在航空航天和國防領(lǐng)域已經(jīng)非常重要,特別是考慮到此類系統(tǒng)都有很長的使用壽命。我們面對的往往是飛行了幾十年的飛機,這些機體上搭載的軟件棧也大多穩(wěn)定運行了幾十年?!?/span>
作為另外一種需要長期支持的應(yīng)用方向,人們對于 Rust 在嵌入式設(shè)備上的表現(xiàn)也抱有興趣。
“很多人都吵著要使用 Rust,對這種新的內(nèi)存安全語言充滿熱情。即使是在航空航天和國防等具有嚴格安全要求的領(lǐng)域,這樣一份對于工作的熱情和沖勁也同樣難能可貴。”
古老的 Ada 編程語言
Ada 源于美國軍方的一個計劃,旨在整合美軍系統(tǒng)中運行著上百種不同的程序設(shè)計語言編寫的程序。其名是為了紀念埃達·洛夫萊斯(Ada Lovelace)而使用 Ada 命名。
也就是說 Ada 早期是美國軍方的專用計算機語言,后來逐漸被應(yīng)用到商業(yè)航空、鐵路運輸、科學(xué)航天器等領(lǐng)域。在 Ada 文檔中的最佳案例上,其中有一個就是波音 777,該機型的軟件 99%是用 Ada 完成,其中制動系統(tǒng)完全用 Ada 來完成。
Ada 雖然在軍事和航空領(lǐng)域應(yīng)用廣泛,但在商業(yè)領(lǐng)域使用場景有限。世界公認的 Ada 專家 Bruce Krell 曾言,自 1983 年 Ada 問世以來,他始終致力于 Ada 編程,專注于國防和航空領(lǐng)域。然而,自 1994 年他離開航空航天領(lǐng)域后,再未有機會使用 Ada。因為他遇到的所有商業(yè)工作都以 C++、Java 和 C#完成。他坦言,初入商業(yè)世界時,他感受到了一種文化沖擊,對 C/C++和零軟件工程的綜合依賴猶如回到了恐龍時代。
至于具體有哪些項目使用了 Ada,從事 Ada 編程和教學(xué) 30 年,白發(fā)蒼蒼的 Jim Rogers 在 Quora 上回復(fù)道,如你所見 Ada 已被用于構(gòu)建商用、民用飛機、軍用飛機、衛(wèi)星及其運載火箭的軟件。F-22 戰(zhàn)斗機的航電軟件全部用 Ada 編寫。“以前有一位老教授維護了一份清單,但他在 2014 年退休了,這份清單就從此再也沒人能維護了?!?/span>
從 Ada 到 Rust
AdaCore 綜合計算各類操作系統(tǒng)和硬件之間的組合,AdaCore 現(xiàn)可支持 50 多種不同平臺。
Ada 的語法源自 Pascal,而且跟 Rust 也有很多共同點,特別是內(nèi)存安全。二者都屬于強類型語言,就是說會嚴格限定存放在變量當中的數(shù)據(jù)類型,由此防止因類型不匹配而導(dǎo)致的錯誤。
Aiello 還補充道,Rust 的類型強度高于 C 甚至 C++。與 Rust 一樣,Ada 也是一種靜態(tài)類型語言,就是說會在編譯時(而非運行時)檢查數(shù)據(jù)類型,從而防止錯誤的發(fā)生。
GNAT Pro 是 AdaCore 打造的開發(fā)平臺,其中包含編譯器、鏈接器、調(diào)試器和語言運行時。Aiello 表示,GNAT Pro 訂閱用戶可以使用 Rust 語言開發(fā)出可安全認證的嵌入式應(yīng)用程序,并享受到 AdaCore 提供的技術(shù)支持。
Aiello 在采訪中解釋道,“我們提供所有服務(wù)選項并隨附保障承諾,這跟大家以往的開源工具鏈使用體驗完全不同。在實踐當中,專業(yè)開發(fā)團隊一旦在使用我們的工具時發(fā)現(xiàn) bug,則可立即向我們提交工單,AdaCore 會盡快為您完成修復(fù)?!?/span>
打造 Rust Fork
AdaCore 之所以選擇分叉 Rust,是為了更好地提供長期支持并實現(xiàn)向下兼容性。AdaCore 在其中采用了 Rust 編譯器、build 加包管理器(Cargo),以及面向 x86_64 Linux 及各 Linux 交叉目標的調(diào)試器(gdb)。該公司表示,GNAT Pro for Rust 25 計劃于明年 10 月正式推出,屆時將提供與 gprbuild 的全面集成,同時帶來先進的 Ada-Rust 雙向綁定以支持更多平臺。
“從某種意義上說,這將是一項相當獨特的服務(wù),也把我們與典型的開源軟件市場區(qū)分開來。在典型的開源市場中,用戶往往不清楚舊版本的編譯器會出哪些問題。一旦在舊版本中發(fā)現(xiàn) bug,問題可能長期得不到修復(fù)。因為每位貢獻者都在繼續(xù)前進、展望未來,所以對以往的缺陷并不是特別關(guān)注。這在某些開發(fā)環(huán)境中有其合理性,但卻不適合那些需要長生命周期和穩(wěn)定認證的應(yīng)用場景?!?/span>
AdaCore 還通過 GNAT Pro Assurance 提供 Rust 技術(shù)支持。只要客戶需要,這項計劃就會持續(xù)通過分支為整個工具鏈提供長效支持。
為了支持這套 Rust fork,AdaCore 還會定期從更新流中提取反饋,不斷聽取客戶對于功能的具體需求,確定將哪些內(nèi)容整合到其版本當中。
Aiello 總結(jié)稱,“我們會獲取整個代碼倉庫,為其創(chuàng)建副本,并以此為基礎(chǔ)持續(xù)更新多個分支。當我們將 Rust 移植到新平臺時,也會全面推動支持包的上游化,保證移植成果能夠反哺開源社區(qū)。”
對比 Rust,Ada 無疑可以算作一種“上古”編程語言。雖然 Ada 不會消亡,但年輕人也并不愿意去學(xué)它。如果 Ada 的應(yīng)用領(lǐng)域從此逐漸能用 Rust 語言代替,看起來并不是壞事。
使用 Ada 的程序員,普遍也都不年輕了。但那些年老的 Ada 程序員看到 AdaCore 支持 Rust,心中卻五味雜陳,跟我們想象中的歡欣鼓舞不太相同,他們實際上很擔心 Ada 的覆蓋范圍會進一步收窄。
一位退休的 Ada 程序員表示很擔憂 Ada 從此會被忽視。“一個典型的例子:當 Rational 在 80 年代中期出現(xiàn)時,他們擊敗了其他 Ada 開發(fā)環(huán)境。然后他們開始支持其他語言(都是出于良好的商業(yè)原因),對 Ada 支持開始減弱,最終,他們停止發(fā)展他們的 IDE, Rational Ada 也交給其他人了?!?/span>
另一位 Ada 程序員也對此表示贊同,他甚至預(yù)測不久后 AdaCore 會更名,以淡化 Ada 的重要性?!八麄冎耙仓С侄嗾Z言,比如 C 和和 C++ ,但(據(jù)我所知)他們從未支持 C 和 C++ 的進步(即對 C 和 C++的發(fā)展做出貢獻),但現(xiàn)在他們對 Rust 的支持程度顯然不一樣?!?/span>
以上為本次所有分享內(nèi)容