-- 什么是 Ada ? --
Ada是一種表現能力很強的通用程序設計語言,它是美國國防部為克服軟件開發危機,耗費巨資,歷時近20年研制成功的。它被譽為 第四代計算機語言的成功代表。與其他流行的程序設計語言不同,它不僅體現了許多現代軟件的開發原理,而且將這些原理付諸實現。因此,Ada語言的使用可大大改善軟件系統的 清晰性, 可靠性, 有效性, 可維護性。Ada是現有的語言中無與倫比的一種 大型通用程序設計語言,它是現代計算機語言的成功代表,集中反映了 程序語言研究的成果。 Ada的出現,標志著軟件工程成功地進入了國家和國際的規模。在一定意義上說,Ada還刺破了“馮.偌依曼思維模式” (Von Newman Mind-set) 的桎梏,連同Ada的 支持環境(APSE)一起,形成了新一派的所謂 Ada文化。它是迄今為止 最復雜,最完備的軟件工具。 Ada語言是 美國國防部指定的 唯一的一種可用于 軍用系統開發的語言,我國軍方也將Ada做為軍內開發標準(GJB 1383《程序設計語言Ada》)。
--------------------------------------------------------------------------------
-- 為什么稱作 Ada --
美國國防部之所以把這種語言取名為Ada,是為了紀念奧左斯特. 艾達.洛夫萊斯伯爵夫人 (Augusta Ada Lovlace 1815-1852),她是英格蘭詩人拜倫(Byron)勛爵的女兒,曾對現代計算機技術之父查爾斯.巴貝奇(Charles Babage)的筆記,手稿進行了整理和修正。從某種意義上說,她是世界上第一位計算機程序員。
--------------------------------------------------------------------------------
-- 為什么使用 Ada? --
在明白這個問題之前,需要了解 Ada 的一系列特性。Ada 最初設計就是一門大型語言,因此在很多編程的重要問題上都有所考慮,以下文字摘自《 Ada Reference Manual》:
Ada最初設計時關注于 3 個最重要的問題:程序的穩定性和可維護性,程序設計和人的行為接近,并且高效。這份語言的修訂版是為了提供更大的靈活性和擴展性,存儲管理的額外控制和同步,以及標準化的程序包以支持重要的應用程序領域,同時保留原來的重點:穩定性,可維護性,和高效。對于程序設計語言促進可靠性和簡化維護難度的需求已被確立。因此程序可讀性的重要性高于輕松地寫代碼。例如,語言規則要求程序變量應當明確聲明并指定它們的類型。由于變量的數據類型是不變的,編譯器可以確保對于變量的操作適用于該類型的對象。另外,有錯誤傾向的符號已經避免,并且語言語法避免了編碼形式的使用,使更傾向于英語的結構。最后,Ada 語言提供了程序單元單獨編譯的功能,使程序開發和維護簡便,同樣也提供了在一個單元內多個單元之間的檢測。考慮人類程序員的問題也在設計時被強調。總而言之,在繼續避免過多復雜句型的缺陷的同時,嘗試以一致系統的方式保持相對較少的底層概念。
上面的文字還是過分抽象,但 Ada 的以下特性幾乎是公認的:
易讀性---專業人員往往要讀很多程序,因此要避免像 APL 那種以過于簡單的符號編程的語言,雖然它們的編程速度快,但基本上是不可讀的。因此目前有種說法是:讀一個程序比寫類似的程序還要費時,這也是有一定道理的;特別是 C/C++ 的風格比較松散,很多語法都在濫用,使程序可讀性相當低,由于 Ada 的語法接近人的語言,即使是初學者,也不會感到很難讀懂。 強類型---保證了每個對象有明確定義的值域,并防止了不同概念的邏輯混淆。許多錯誤可以被編譯器發現,而對于其它語言來說,則可能導致一個不正確的程序。 異常處理---實際中,一個程序不可能保證它的正確性;因此,通過異常機制及分塊結構,將錯誤發生的影響控制在某一特定領域。 抽象數據類型---將數據描述的細節同基于該類型數據的操作相分離,以提高可移植性和可靠性。 多任務---使程序變成一系類的并發活動,而不是單一的順序活動;這在很多領域,特別是對于服務器程序來說有重要意義,這比調用操作系統提供的功能更有易可移植性和可靠性。 類屬單元---很多情況下,程序的某邏輯部份與運行時值的類型無關。因此,需要提供一種機制,從一個樣板中產生多個相應的程序段,以提高代碼的可重用性。 大型編譯---封裝機制,單獨編譯及程序包的分層機制等對于編寫大規模的程序來說是必不可少的。
--------------------------------------------------------------------------------
-- 為什么 Ada 不流行? --
1) 一些知名人物狠批了 Ada一頓。Tony Hoare 在他的圖靈獎的演講中將 Ada 狠貶了一頓,從字面上說就是:如果我們使用 Ada,人類的前途將很危險。但他的批評似乎有點過時了。他所說的多種將使地球上的生物完蛋的事物之一就是使用異常!雖然異常會被濫用,但這是所有語言特性共有的毛病,并且,現在,每個人似乎都認為異常是一個很不錯的主意。Ada 在 1983 年以前沒有標準化,而 Hoare 的講話是在 1980 年。Ada 語言從 1980 的草案到 1983 年的最終版本,變化還是相當大。Parnas, Dijkstra 也批評 Ada 語言,特別是它的規模,Hoare 的言論可能影響了 ACM 的投票人,以致在投票中反對 Ada 語言。
2) 大部份程序員還無法接受 Ada 的一些設計。如在程序運行時發現錯誤,再用調試器去尋找和修正錯誤是編程的正常方法。他們不知道很多錯誤可以由編譯器檢測,并且,他們知道,沒必要這樣做,因為修正錯誤相當具有挑戰性,可以說有點有趣。因此,對于新特性的不解,也就將 Ada 貶了一頓。
3) 早期編譯器過分昂貴,并且編譯器(直至今天)很難實現。作為語言設計者,Jean Ichbiah 對于語言的具體實現關注不夠。(作為對比,Tucker 是編譯器程序員的語言設計者。)對此的明顯的一個回應就是沒有便宜的編譯器(在 US$50 - US$100 之間)你能在家里的 PC 上運行,所以沒人可體驗 Ada 語言。Ada 本就錯過了 PC 革命的大船,并且沒有可能和 Pascal,C 一樣有群眾基礎(因為這些語言相對來說實現較簡單,因此更加容易的存在) (更少的播放時間)。市場只選擇實用性,編譯器的成本比語言本身的質量更加重要。這可能不是很明智的選擇,因為人力勞動來除錯所消耗的成本遠大于編譯器,但因為在業界這沒有度量標準,決策制定者不知道這些。
4) 整個業界都致力于銷售彌補 C 語言缺陷的軟件,如尋找內存泄漏,類型錯誤等。像 Les Hatton 他們要維護自己的既得利益,這樣就要維護事情的原樣,因為他們的生計依賴于那些使用錯誤較多的語言的人。當你告訴他們,如果使用 Ada,他們可以扔掉其它工具時,這些人不會站在你這邊,因為對他們而言吃飯比新技術更重要。
5) Ada 83 沒有類型擴展和動態聯編(type extension and dynamic binding),因此錯過了對象技術革命的船,而在80年代流行使用面向對象的語言。當時,Smalltalk 是很流行的面向對象語言,并且速度相當慢,因為它是一門解釋性語言。令人傷心的是,很多人至今沒注意到這點,并得出結論:面向對象程序設計使你的程序效率低下;這就壓制了包含面向對象特性到確定性的實時語言中去的想法。(例如:在 SIGAda *今年*(1998) 有人打電話詢問,解釋說他是搞時實時系統的,他想明白他是否要擔心面向對象程序設計!有些謠言實在頑固。)
6)政府的管制。國防部對于 Ada 的開發介入比較多,其中有些做法令人比較不滿。同時掛著美國國防部名頭的語言,可能給人兩種感覺:1.出于對政府的不滿,將氣也出到 Ada 頭上,認為 Ada 只是政府作的東西,不怎么樣;2.國防部的語言,跟我們這些民用程序程序沒什么關系。可以說,由于對于 Ada 的誤解,致使目前 Ada 還很不流行。
|