Ada編譯器都由Ada合格評估測試套件(ACATS)充分評估。的Ada編譯器GNAT可免費(fèi)從GPL獲得。
Ada完全是為高可靠性嵌入式應(yīng)用而設(shè)計(jì)。在這方面,無論C還是C++都無法相比。RavenscarProfile更加精妙的針對實(shí)時(shí)嵌入式系統(tǒng)。任務(wù)分配是內(nèi)置功能,無需RTOS供應(yīng)商額外提供。
你可能認(rèn)為“更快,更好并且免費(fèi)的工具”將是相當(dāng)吸引人的理由,但是它卻沒能說服大部分人。這為什么呢?
這可能不是任何效率低下的原因所致。AdaCore的主席RobertDewar告訴我,與C語言相比,即使采用所有運(yùn)行時(shí)檢查,所獲得的性能預(yù)期雖然不會(huì)超過20%,但大約能達(dá)到10%。
或許我應(yīng)該界定“運(yùn)行時(shí)檢查”,因?yàn)檫@個(gè)概念和C語言性質(zhì)不同。Ada會(huì)尋找錯(cuò)誤條件,例如被0除等。你甚至可以定義整數(shù)的非法范圍。但在C語言中,我們可以這樣寫:
num_doses=0;
morphine=patient_pain/num_doses;
dispense_morphine(morphine);
我們不能將其歸咎于缺乏編譯器。AdaCore已經(jīng)將GNAT移植到大部分主流的16和32位CPU上。
根據(jù)我的經(jīng)驗(yàn),剛接觸Ada的開發(fā)人員通常討厭這種語言。要獲得可編譯的源代碼顯得非常困難。但是,經(jīng)歷了三個(gè)Ada項(xiàng)目后,大部分程序員學(xué)會(huì)喜歡上這種語言。當(dāng)然,他們投入了更多努力,用來編寫正確的代碼(這當(dāng)然是好事情),但是他們節(jié)省了大量調(diào)試的時(shí)間。
正如一位記者RichRies給我寫的信所言:“Ada之所以不能成功,或許類似于我們對健康生活方式的態(tài)度-有時(shí)我們都知道應(yīng)該那樣做,但卻很少真正去實(shí)踐!”