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