Ada是什么?

2018-10-24 10:05 更新

Ada是什么?

Ada是什么?

Ada,是一種程序設(shè)計語言。源于美國軍方的一個計劃,旨在整合美軍事系統(tǒng)中運行著上百種不同的程序設(shè)計語言。其命名是為了紀念世界上第一位程序員Ada Lovelace。Ada不僅體現(xiàn)了許多現(xiàn)代軟件的開發(fā)原理,而且將這些原理付諸實現(xiàn)。同時,Ada語言的使用可大大改善軟件系統(tǒng)的清晰性、可靠性、有效性、可維護性。Ada是現(xiàn)有的語言中無與倫比的一種大型通用程序設(shè)計語言,它是現(xiàn)代計算機語言的成功代表,集中反映了程序語言研究的成果。Ada的出現(xiàn),標志著軟件工程成功地進入了國家和國際的規(guī)模。在一定意義上說,Ada打破了John von Neumann 思維模式的桎梏,連同Ada的支持環(huán)境(APSE)一起,形成了新一派的Ada文化。它是迄今為止最復(fù)雜、最完備的軟件工具。Ada曾是美國國防部指定唯一可用于軍用系統(tǒng)開發(fā)的語言。

Ada是怎么面世的?

1974 年時,美國國防部(DoD)意識到開發(fā)和維護嵌入式系統(tǒng)(固化在硬件中的系統(tǒng),如導(dǎo)彈彈導(dǎo)系統(tǒng))耗費了過多的時間,精力和資金。
當時,在使用的計算機語言有 450 多種,這增加了開發(fā)新系統(tǒng)以及培訓(xùn)程序員使熟悉現(xiàn)有系統(tǒng)的時間和成本。維護工作也由于沒有標準化的工具(編輯器,編譯器等)而受阻。所有這些因素使 DoD 意識到它需要一門強大的語言,能被所有嵌入式電腦供應(yīng)商使用。
開發(fā)工作始于 1975 年,當時 DoD 列舉了一系列的語言需求;但沒有一門現(xiàn)有語言指定了這些特性,因此在 1977 年,DoD 起草了一份建議,開發(fā)一門新的語言。不像COBOL 這些語言由專門的委員會制定,新語言是一場競爭的主題,在產(chǎn)業(yè)界和學(xué)術(shù)界的評估中產(chǎn)生。
在眾多競爭者當中,有 4 家被選中以完成進一步的工作。最終只剩下 Cii-Honeywell Bull 公司。這門語言被命名為 Ada。設(shè)計小組由 Jean Ichbiah 領(lǐng)導(dǎo),對語言全權(quán)負責(zé)。
在 1983,Ada 成為了一個 ANSI 標準 ANSI/MIL-STD-1815A。此年成為一個 ISO 標準。在參考手冊中定義的語言通常稱為 LRM 或 ARM(Ada Reference Manual)。在Ada 的相關(guān)書籍和編譯器的報錯信息中經(jīng)常出現(xiàn)手冊內(nèi)容的引用。對于任何 Ada 站點,參考手冊都是推薦的;雖然很難閱讀,但它是所有 Ada 問題的最權(quán)威解釋(一個小組正在澄清語言定義中已發(fā)現(xiàn)的語義不清的內(nèi)容)。
Ada 也經(jīng)過了一次修正,即 1995 的新的 ISO 標準。新標準修正了 Ada83 的很多缺陷,并進一步擴展了它的功能(在修正工作中,有個臨時的標準,即 Ada9x,不少 Ada 文章是在 這段時間寫的,因此有些內(nèi)容在細節(jié)上可能與 Ada95 有所區(qū)別,但主要原理差不多)。
為了防止 Ada 編譯器的不兼容版本的擴散,Ada Joint Program Office (控制 Ada 語言的執(zhí)行部門,于 1998 年 10 月 1 日關(guān)閉,見 Ada Joint Program Office closed) 采取了不尋常的做法 – 他們注冊 Ada 商標。除非通過他們的兼容性測試,編譯器廠商不允許出售 ?Ada‘ 編譯器。這在不久以后放松了,保護協(xié)議變成了 `Validated Ada‘。因而產(chǎn)生的 Ada 確認證書被限制在一定的時間內(nèi)并有一個期滿時間。當時間過期后,該編譯器不能再被標記為`Validated Ada‘ 編譯器。通過這種方式,AJPO 確保當前市場上的編譯器與當前標準相一致。
目標是使所有的 Ada 程序能在所有系統(tǒng)上被編譯-在這點上,AJPO 比其它語言小組做得好。

時間表

1975年4月,HOLWG工作組成立后先制訂了Strawman語言要求系列文檔,以祈將國防部高級語言的需求規(guī)劃化。8月,更新為Woodenman版;

1976年1月更新為Tinman版,1977年1月更新為Ironman版,最終于1978年6月制訂出Steelman語言要求系列文檔。期間工作組對眾多編程語言正式進行檢討,結(jié)果發(fā)現(xiàn)現(xiàn)存語言中并無任何一種能符合文檔規(guī)格。工作組亦曾向四個分別以紅(Benjamin Brosgol等)、綠(Jean Ichbiah等)、藍(John Goodenough等)、黃(Jay Spitzen等)為名的承包商發(fā)出聘任,請求他們提供發(fā)展暫新程式設(shè)計語言的建議。

1978年4月,紅組與綠組的建議在大眾注目下均通過并進階。

1979年5月,Jean Ichbiah率領(lǐng)的綠組建議方案被釆納并被命名為Ada,紀念計算機程序創(chuàng)始人Ada Lovelace。

1979年6月,Ada語言的設(shè)計初步參考手冊由ACM在SIGPLAN Notices雜志上發(fā)表。

1979年10月,Ada語言在波士頓舉行了公開測試和評估會議;因應(yīng)會議后修正的需求說明Stoneman版文檔于1980年2月發(fā)布。

1980年7月,Ada的修訂版完成;軍事標準參考手冊于12月獲得批準,并被授予Ada Lovelace出生年份數(shù)字1815命名為MIL-STD 1815。

1982年7月,Ada另一個修訂版本的參考手冊發(fā)布。

1983年,美國國家標準學(xué)會(ANSI)對Ada語言進行了標準化,Gerhard Goos和Juris Hartmanis對此最終版本進行了說明。

1983年4月,紐約大學(xué)采用高格別SETL的Ada/Ed編譯器首次執(zhí)行Ada語言驗證,隨后多間商業(yè)機構(gòu)加入提供Ada編譯器和相關(guān)開發(fā)工具行列。

1991年開始,美國國防部要求所有軟件運用必用Ada語言。 1997年,此規(guī)則被撤回。

Ada語言為什么會被廣泛運用?

Ada語言最早是針對嵌入式和實時系統(tǒng)設(shè)計的,并且在現(xiàn)今依然在這些方面廣泛使用。Ada95版,是由INTERMETRICS公司的塔克·塔夫特于1992到1995年間設(shè)計的,當時主要是希望改進對于系統(tǒng)、數(shù)字、財務(wù)軟件編程的支持。

Ada語言的重要特征就是其嵌入式風(fēng)格,模塊化設(shè)計,編譯檢查,平行處理,異常處理及泛型編程。Ada在95年加入了對面向?qū)ο笤O(shè)計的支持,包括動態(tài)分配等。

Ada的編譯檢查主要是針對沒有分配的內(nèi)存讀寫的保護,堆棧溢出錯誤,單個錯誤空閑,隊列讀寫錯誤以及其他可以避免的小問題。這些檢查可以在為增加效率的情況下被取消,但是在編譯的時候他們卻能帶來很高的效率。同樣它也包括對程序的嚴正的設(shè)置。因為這些原因,它被廣泛應(yīng)用于一些非常重要的系統(tǒng)中,例如航空電子學(xué),武器及航天飛行器的操作系統(tǒng)中。

同樣它支持很多的編譯時間檢查,這些檢查被用來避免一些錯誤的發(fā)生。這種錯誤往往是在其他語言中運行之前難以被察覺到的,需要在源碼中加入特殊的檢查設(shè)置才能被發(fā)現(xiàn)。

Ada的動態(tài)內(nèi)存管理非常安全和高規(guī)格,它類似于JAVA語言卻不同于C語言的。這種特殊功能并不需要特殊的運行設(shè)置。盡管這種語言的語意結(jié)構(gòu)允許對于不能讀寫的目標進行自動的碎片搜集,但是大多數(shù)運行都不支持它。Ada卻支持有限形式基于區(qū)域的存儲管理。無效的讀寫常在運行時候被檢查出來(除非這種檢測被人為關(guān)閉)并且有時候在編譯時候就被發(fā)現(xiàn)。

Ada語言的定義同國際標準化組織(ISO)的標準有很大不同,因為他是一個自由內(nèi)容形式的。這種做法的后果是被廣大程序員只能從它的標準化文檔(普遍認為是Ada的參考使用手冊(ARM))尋找細節(jié)性的技術(shù)問題,但是普遍情況是一本標準教科書卻可以在其他不同語言上使用。

Ada語言由嚴格的巴斯特范式定義,但是不適合一般人閱讀.它是第一種同時擁有IEC/ISO/美國軍用標準認證的語言.其編譯器經(jīng)過嚴格的審查,以確保同樣的代碼在任一編譯器上產(chǎn)生同樣的可執(zhí)行效果,并且保證并行性在代碼級可以在無操作系統(tǒng)下同樣運行。

與 C 和 C++ 有什么不同?

由于 Ada 出生年月遲了一點,而且目前的操作系統(tǒng)基本上由 C,C++ 寫成,導(dǎo)致 Ada 在―平民層‖的推廣比較糟糕,至今還不是很流行,Why Ada isn‘t Popular 一文對此有比較詳細的解釋。而 Ada 愛好者們?yōu)榱孙@示 Ada 的優(yōu)越性(這種心情相當能理解),將 Ada 與 C,C++ 做了一系列比較,其結(jié)果反正綜和指數(shù)都是 Ada 高,這方面文章有不少,如 Comparing Development Costs of C and Ada,Contrasts: Ada 95 & C++。在這里,我們只初略地了解一下 Ada 的優(yōu)勢即可,在讀者朋友接下去的學(xué)習(xí)中,應(yīng)該是能從心里感受到 Ada 的優(yōu)點。
1. 更高的安全性、可靠性。Ada 中對于訪問內(nèi)存、數(shù)值計算等很多方面有一些嚴格的規(guī)定,而沒有 C 和 C++ 那么自由;程序的錯誤絕大部份能在編譯和運行時檢測到,以至于可以不需要編譯器,另外,語言也包含異常特性,能方便地處理錯誤。
2. 更高的移植性。在 Unix 和 Windows 下有 C 編程經(jīng)驗的朋友應(yīng)該對于兼容性深有體會,很多代碼純粹是為了適應(yīng)不同的系統(tǒng)增添的,對于實際工作沒多大用處。但 Ada 的初始語言環(huán)境中就有了異常(約等于 Unix 下的 Signal)、任務(wù)(線程)、分布式計算、隨機數(shù)產(chǎn)生、寬字符集很多特性的支持,而在現(xiàn)在的具體操作系統(tǒng)中,這些特性往往隨系統(tǒng)而異。即使 Ada95 里缺少一些功能,也可以通過額外標準和函數(shù)庫來彌補:GDI 庫,可以用 GtkAda,在 Windows 和X 下通用;Ada 也有一個 Posix 接口的標準,可以使用函數(shù)庫 Florist 來調(diào)用 Posix 的函數(shù)……用戶層是大大省力—只要自己的操作系統(tǒng)上有所需的編譯器和函數(shù)庫即可。
3. 語法明確,基本上沒有令人混淆的地方。Ada 程序的源代碼遠遠比 C 或 C++ 的代碼易懂??闯绦虻娜耸菧p輕了不少腦負擔(dān)。
4. ……
5. ……
……
總之,C 和 C++ 能做的 Ada 肯定能做,但 Ada 要省時方便的多。讀者在學(xué)習(xí) Ada之后,無需多說也就明白了,筆者在初學(xué) Ada 時就有耳目一新的感覺,唯一的遺憾是 Ada 不流行。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號