Ada,是一種程序設(shè)計(jì)語(yǔ)言。源于美國(guó)軍方的一個(gè)計(jì)劃,旨在整合美軍事系統(tǒng)中運(yùn)行著上百種不同的程序設(shè)計(jì)語(yǔ)言。其命名是為了紀(jì)念世界上第一位程序員Ada Lovelace。Ada不僅體現(xiàn)了許多現(xiàn)代軟件的開(kāi)發(fā)原理,而且將這些原理付諸實(shí)現(xiàn)。同時(shí),Ada語(yǔ)言的使用可大大改善軟件系統(tǒng)的清晰性、可靠性、有效性、可維護(hù)性。Ada是現(xiàn)有的語(yǔ)言中無(wú)與倫比的一種大型通用程序設(shè)計(jì)語(yǔ)言,它是現(xiàn)代計(jì)算機(jī)語(yǔ)言的成功代表,集中反映了程序語(yǔ)言研究的成果。Ada的出現(xiàn),標(biāo)志著軟件工程成功地進(jìn)入了國(guó)家和國(guó)際的規(guī)模。在一定意義上說(shuō),Ada打破了John von Neumann 思維模式的桎梏,連同Ada的支持環(huán)境(APSE)一起,形成了新一派的Ada文化。它是迄今為止最復(fù)雜、最完備的軟件工具。Ada曾是美國(guó)國(guó)防部指定唯一可用于軍用系統(tǒng)開(kāi)發(fā)的語(yǔ)言。
1974 年時(shí),美國(guó)國(guó)防部(DoD)意識(shí)到開(kāi)發(fā)和維護(hù)嵌入式系統(tǒng)(固化在硬件中的系統(tǒng),如導(dǎo)彈彈導(dǎo)系統(tǒng))耗費(fèi)了過(guò)多的時(shí)間,精力和資金。
當(dāng)時(shí),在使用的計(jì)算機(jī)語(yǔ)言有 450 多種,這增加了開(kāi)發(fā)新系統(tǒng)以及培訓(xùn)程序員使熟悉現(xiàn)有系統(tǒng)的時(shí)間和成本。維護(hù)工作也由于沒(méi)有標(biāo)準(zhǔn)化的工具(編輯器,編譯器等)而受阻。所有這些因素使 DoD 意識(shí)到它需要一門強(qiáng)大的語(yǔ)言,能被所有嵌入式電腦供應(yīng)商使用。
開(kāi)發(fā)工作始于 1975 年,當(dāng)時(shí) DoD 列舉了一系列的語(yǔ)言需求;但沒(méi)有一門現(xiàn)有語(yǔ)言指定了這些特性,因此在 1977 年,DoD 起草了一份建議,開(kāi)發(fā)一門新的語(yǔ)言。不像COBOL 這些語(yǔ)言由專門的委員會(huì)制定,新語(yǔ)言是一場(chǎng)競(jìng)爭(zhēng)的主題,在產(chǎn)業(yè)界和學(xué)術(shù)界的評(píng)估中產(chǎn)生。
在眾多競(jìng)爭(zhēng)者當(dāng)中,有 4 家被選中以完成進(jìn)一步的工作。最終只剩下 Cii-Honeywell Bull 公司。這門語(yǔ)言被命名為 Ada。設(shè)計(jì)小組由 Jean Ichbiah 領(lǐng)導(dǎo),對(duì)語(yǔ)言全權(quán)負(fù)責(zé)。
在 1983,Ada 成為了一個(gè) ANSI 標(biāo)準(zhǔn) ANSI/MIL-STD-1815A。此年成為一個(gè) ISO 標(biāo)準(zhǔn)。在參考手冊(cè)中定義的語(yǔ)言通常稱為 LRM 或 ARM(Ada Reference Manual)。在Ada 的相關(guān)書籍和編譯器的報(bào)錯(cuò)信息中經(jīng)常出現(xiàn)手冊(cè)內(nèi)容的引用。對(duì)于任何 Ada 站點(diǎn),參考手冊(cè)都是推薦的;雖然很難閱讀,但它是所有 Ada 問(wèn)題的最權(quán)威解釋(一個(gè)小組正在澄清語(yǔ)言定義中已發(fā)現(xiàn)的語(yǔ)義不清的內(nèi)容)。
Ada 也經(jīng)過(guò)了一次修正,即 1995 的新的 ISO 標(biāo)準(zhǔn)。新標(biāo)準(zhǔn)修正了 Ada83 的很多缺陷,并進(jìn)一步擴(kuò)展了它的功能(在修正工作中,有個(gè)臨時(shí)的標(biāo)準(zhǔn),即 Ada9x,不少 Ada 文章是在 這段時(shí)間寫的,因此有些內(nèi)容在細(xì)節(jié)上可能與 Ada95 有所區(qū)別,但主要原理差不多)。
為了防止 Ada 編譯器的不兼容版本的擴(kuò)散,Ada Joint Program Office (控制 Ada 語(yǔ)言的執(zhí)行部門,于 1998 年 10 月 1 日關(guān)閉,見(jiàn) Ada Joint Program Office closed) 采取了不尋常的做法 – 他們注冊(cè) Ada 商標(biāo)。除非通過(guò)他們的兼容性測(cè)試,編譯器廠商不允許出售 ?Ada‘ 編譯器。這在不久以后放松了,保護(hù)協(xié)議變成了 `Validated Ada‘。因而產(chǎn)生的 Ada 確認(rèn)證書被限制在一定的時(shí)間內(nèi)并有一個(gè)期滿時(shí)間。當(dāng)時(shí)間過(guò)期后,該編譯器不能再被標(biāo)記為`Validated Ada‘ 編譯器。通過(guò)這種方式,AJPO 確保當(dāng)前市場(chǎng)上的編譯器與當(dāng)前標(biāo)準(zhǔn)相一致。
目標(biāo)是使所有的 Ada 程序能在所有系統(tǒng)上被編譯-在這點(diǎn)上,AJPO 比其它語(yǔ)言小組做得好。
時(shí)間表
1975年4月,HOLWG工作組成立后先制訂了Strawman語(yǔ)言要求系列文檔,以祈將國(guó)防部高級(jí)語(yǔ)言的需求規(guī)劃化。8月,更新為Woodenman版;
1976年1月更新為Tinman版,1977年1月更新為Ironman版,最終于1978年6月制訂出Steelman語(yǔ)言要求系列文檔。期間工作組對(duì)眾多編程語(yǔ)言正式進(jìn)行檢討,結(jié)果發(fā)現(xiàn)現(xiàn)存語(yǔ)言中并無(wú)任何一種能符合文檔規(guī)格。工作組亦曾向四個(gè)分別以紅(Benjamin Brosgol等)、綠(Jean Ichbiah等)、藍(lán)(John Goodenough等)、黃(Jay Spitzen等)為名的承包商發(fā)出聘任,請(qǐng)求他們提供發(fā)展暫新程式設(shè)計(jì)語(yǔ)言的建議。
1978年4月,紅組與綠組的建議在大眾注目下均通過(guò)并進(jìn)階。
1979年5月,Jean Ichbiah率領(lǐng)的綠組建議方案被釆納并被命名為Ada,紀(jì)念計(jì)算機(jī)程序創(chuàng)始人Ada Lovelace。
1979年6月,Ada語(yǔ)言的設(shè)計(jì)初步參考手冊(cè)由ACM在SIGPLAN Notices雜志上發(fā)表。
1979年10月,Ada語(yǔ)言在波士頓舉行了公開(kāi)測(cè)試和評(píng)估會(huì)議;因應(yīng)會(huì)議后修正的需求說(shuō)明Stoneman版文檔于1980年2月發(fā)布。
1980年7月,Ada的修訂版完成;軍事標(biāo)準(zhǔn)參考手冊(cè)于12月獲得批準(zhǔn),并被授予Ada Lovelace出生年份數(shù)字1815命名為MIL-STD 1815。
1982年7月,Ada另一個(gè)修訂版本的參考手冊(cè)發(fā)布。
1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(ANSI)對(duì)Ada語(yǔ)言進(jìn)行了標(biāo)準(zhǔn)化,Gerhard Goos和Juris Hartmanis對(duì)此最終版本進(jìn)行了說(shuō)明。
1983年4月,紐約大學(xué)采用高格別SETL的Ada/Ed編譯器首次執(zhí)行Ada語(yǔ)言驗(yàn)證,隨后多間商業(yè)機(jī)構(gòu)加入提供Ada編譯器和相關(guān)開(kāi)發(fā)工具行列。
1991年開(kāi)始,美國(guó)國(guó)防部要求所有軟件運(yùn)用必用Ada語(yǔ)言。 1997年,此規(guī)則被撤回。
Ada語(yǔ)言最早是針對(duì)嵌入式和實(shí)時(shí)系統(tǒng)設(shè)計(jì)的,并且在現(xiàn)今依然在這些方面廣泛使用。Ada95版,是由INTERMETRICS公司的塔克·塔夫特于1992到1995年間設(shè)計(jì)的,當(dāng)時(shí)主要是希望改進(jìn)對(duì)于系統(tǒng)、數(shù)字、財(cái)務(wù)軟件編程的支持。
Ada語(yǔ)言的重要特征就是其嵌入式風(fēng)格,模塊化設(shè)計(jì),編譯檢查,平行處理,異常處理及泛型編程。Ada在95年加入了對(duì)面向?qū)ο笤O(shè)計(jì)的支持,包括動(dòng)態(tài)分配等。
Ada的編譯檢查主要是針對(duì)沒(méi)有分配的內(nèi)存讀寫的保護(hù),堆棧溢出錯(cuò)誤,單個(gè)錯(cuò)誤空閑,隊(duì)列讀寫錯(cuò)誤以及其他可以避免的小問(wèn)題。這些檢查可以在為增加效率的情況下被取消,但是在編譯的時(shí)候他們卻能帶來(lái)很高的效率。同樣它也包括對(duì)程序的嚴(yán)正的設(shè)置。因?yàn)檫@些原因,它被廣泛應(yīng)用于一些非常重要的系統(tǒng)中,例如航空電子學(xué),武器及航天飛行器的操作系統(tǒng)中。
同樣它支持很多的編譯時(shí)間檢查,這些檢查被用來(lái)避免一些錯(cuò)誤的發(fā)生。這種錯(cuò)誤往往是在其他語(yǔ)言中運(yùn)行之前難以被察覺(jué)到的,需要在源碼中加入特殊的檢查設(shè)置才能被發(fā)現(xiàn)。
Ada的動(dòng)態(tài)內(nèi)存管理非常安全和高規(guī)格,它類似于JAVA語(yǔ)言卻不同于C語(yǔ)言的。這種特殊功能并不需要特殊的運(yùn)行設(shè)置。盡管這種語(yǔ)言的語(yǔ)意結(jié)構(gòu)允許對(duì)于不能讀寫的目標(biāo)進(jìn)行自動(dòng)的碎片搜集,但是大多數(shù)運(yùn)行都不支持它。Ada卻支持有限形式基于區(qū)域的存儲(chǔ)管理。無(wú)效的讀寫常在運(yùn)行時(shí)候被檢查出來(lái)(除非這種檢測(cè)被人為關(guān)閉)并且有時(shí)候在編譯時(shí)候就被發(fā)現(xiàn)。
Ada語(yǔ)言的定義同國(guó)際標(biāo)準(zhǔn)化組織(ISO)的標(biāo)準(zhǔn)有很大不同,因?yàn)樗且粋€(gè)自由內(nèi)容形式的。這種做法的后果是被廣大程序員只能從它的標(biāo)準(zhǔn)化文檔(普遍認(rèn)為是Ada的參考使用手冊(cè)(ARM))尋找細(xì)節(jié)性的技術(shù)問(wèn)題,但是普遍情況是一本標(biāo)準(zhǔn)教科書卻可以在其他不同語(yǔ)言上使用。
Ada語(yǔ)言由嚴(yán)格的巴斯特范式定義,但是不適合一般人閱讀.它是第一種同時(shí)擁有IEC/ISO/美國(guó)軍用標(biāo)準(zhǔn)認(rèn)證的語(yǔ)言.其編譯器經(jīng)過(guò)嚴(yán)格的審查,以確保同樣的代碼在任一編譯器上產(chǎn)生同樣的可執(zhí)行效果,并且保證并行性在代碼級(jí)可以在無(wú)操作系統(tǒng)下同樣運(yùn)行。
更多建議: