Ada

**Ada**，是一種程式設計語言。它源於美國國防部在二十世紀七十年代的計劃，旨在整合美軍系統程式設計語言，而當時美軍系統執行著上百種不同的程式設計語言，並提高除錯能力和效率，由 Pascal 及其他語言擴充而成，接近自然語言和數學表達式，用「Ada」命名以紀念愛達・勒芙蕾絲（Ada Lovelace）。

## 重要特徵

Ada 語言最早針對嵌入式和即時運算設計，至今依然在這些領域廣泛使用。Ada95 版，是由 INTERMETRICS 公司的塔克・塔夫特於 1992 到 1995 年間設計的，旨在改進對於系統、數字、財務軟體編程的支援。

Ada 語言的重要特徵就是其嵌入式風格，模組化編程，編譯檢查，平行處理，例外處理及泛型編程。Ada 在 1995 年加入了對物件導向設計的支援，包括動態分配等。

Ada 的編譯檢查主要是針對沒有分配的記憶體讀寫的保護，堆疊溢位錯誤，單個錯誤空閒，佇列讀寫錯誤以及其他可以避免的小問題。這些檢查可以在為增加效率的情況下被取消，但是在編譯的時候他們卻能帶來很高的效率。同樣它也包括對程式的嚴正的設定。因為這些原因，它被廣泛應用於一些非常重要的系統中，例如航空電子學，武器及航天飛行器的作業系統中。

同樣它支援很多的編譯時間檢查，這些檢查被用來避免一些錯誤的發生。這種錯誤往往是在其他語言中執行之前難以被察覺到的，需要在原始碼中加入特殊的檢查設定才能被發現。

Ada 的動態記憶體管理非常安全和高規格，它類似於 JAVA 語言卻不同於 C 語言的。這種特殊功能並不需要特殊的執行設定。儘管這種語言的語意結構允許對於不能讀寫的目標進行自動的碎片搜集，但是大多數執行時都不支援該特性。Ada 卻支援有限形式基於區域的儲存管理。無效的讀寫常在執行時候被檢查出來（除非這種檢測被人為關閉）並且有時候在編譯時候就被發現。

Ada 語言的定義同國際標準化組織（ISO）的標準有很大不同，因為他是一個自由內容形式的。這種做法的後果是被廣大程式設計師只能從它的標準化文件（普遍認為是 Ada 的參考使用手冊（ARM））尋找細節性的技術問題，但是普遍情況是一本標準教科書卻可以在其他不同語言上使用。

Ada 語言由嚴格的巴斯特範式定義，不適合一般人閱讀。它是第一種同時擁有 IEC/ISO/ 美國軍用標準認證的語言，其編譯器經過嚴格的審查，以確保同樣的代碼在任一編譯器上產生同樣的可執行效果，並且保證並列性在代碼級可以在無作業系統下同樣執行。

## 歷史

在 1970 年代，美國國防部（DoD）所屬的嵌入式電腦系統專案中使用的程式語言數量逐日增多，其中的很多語言十分陳舊或者依賴於硬體，而且沒有一個支援安全的模組化編程，對此 DoD 感到十分擔心。基於這個原因，在 1975 年成立了高階語言工作群組（HOLWG），它的使命是就是尋找或者創造某種適合國防部需要的程式語言，以便減少現有程式語言數量。該小組最終的工作成果就是 Ada 語言。由此，類似專案中使用的高階程式語言的數量大大減少了，1983 年的 450 種程式語言，到 1996 年只剩下 37 種。

工作群組開發出了語言要求文件 — 文件。許多現存的語言都被仔細地檢查，但是 1977 年這個團隊聲稱沒有任何現存語言符合他們的條件。

## Ada 語言的範例程式

Hello, World! 程式：

在 Ada.Text\_IO.Put\_Line 處有一些捷徑，不需要很多的文字輸入，但是對於這裡的理解來講並沒有多大意義。細節性的問題請參考 Ada Programming/Basic。

判定一個字串是否為回文的函式（遞迴）:

定義一個函式用來判定一字串是否為回文：

 

## 關於亞利安 5 號運載火箭的失敗

一個普遍的關於歐洲太空總署亞利安 5 號運載火箭失敗的說法是因為 Ada 語言在編譯過程的檢查失敗導致的。將大的浮點數轉換成整數是一種常見的程式錯誤來源。1996 年 6 月 4 日，對於亞利安 5 號運載火箭的初次航行來說，這樣一個錯誤產生了災難性的後果。發射後僅僅 37 秒，火箭偏離它的飛行路徑，解體並爆炸了。火箭上載有價值 5 億美元的通信衛星。6 億美元付之一炬。後來的調查顯示，控制慣性導航系統的電腦向控制引擎噴嘴的電腦傳送了一個無效資料。失事調查報告指出，火箭爆炸是因為：

> 
> During execution of a data conversion from 64-bit floating point to 16-bit signed integer value, the floating point number which was converted had a value greater than what could be represented by a 16-bit signed integer. This resulted in an Operand Error.
> 
> 

它沒有傳送飛行控制資訊，而是送出了一個診斷位元型樣，表明在將一個 64 位元浮點數轉換成 16 位元有符號整數時，產生了溢位。溢位值測量的是火箭的水平速率，這比早先的亞利安 4 型運載火箭所能達到的高出了 5 倍。在設計亞利安 4 型運載火箭的軟體時，他們小心地分析了數字值，並且確定水平速率絕不會超出一個 16 位元的數。不幸的是，他們在亞利安 5 號運載火箭的系統中簡單地重新使用了這一部分，而沒有檢查它所基於的假設。Ada 代碼如下：

## 參見

## 參考書目

### 國際標準

* ISO/IEC 8652：Information technology — Programming languages — Ada
* ISO/IEC 15291：Information technology — Programming languages — Ada Semantic Interface Specification（ASIS）
* ISO/IEC 18009：Information technology — Programming languages — Ada: Conformity assessment of a language processor（ACATS）
* IEEE Standard 1003.5b-1996，the POSIX Ada binding
* Ada Language Mapping Specification，the CORBA IDL to Ada mapping

### 書目

* Jan Skansholm：_Ada 95 From the Beginning_, Addison-Wesley, ISBN 0-201-40376-5
* John Barnes：_Programming in Ada plus Language Reference Manual_, Addison-Wesley, ISBN 0-201-56539-0
* John Barnes：_Programming in Ada 95_, Addison-Wesley, ISBN 0-201-34293-6
* John Barnes：_High Integrity Ada: The SPARK Approach_, Addison-Wesley, ISBN 0-201-17517-7
* John Barnes：_High Integrity Software: The SPARK Approach to Safety and Security_, Addison-Wesley, ISBN 0-321-13616-0
* Dean W. Gonzalez：_Ada Programmer's Handbook_, Benjamin-Cummings Publishing Company, ISBN 0-8053-2529-8
* M. Ben-Ari：_Ada for Software Engineers_, John Wiley & Sons, ISBN 0-471-97912-0
* Norman Cohen：_Ada as a Second Language_, McGraw-Hill Science/Engineering/Math, ISBN 0-07-011607-5
* Alan Burns，Andy Wellings：_Real-Time Systems and Programming Languages. Ada 95, Real-Time Java and Real-Time POSIX._, Addison-Wesley, ISBN 0-201-72988-1
* Alan Burns，Andy Wellings：_Concurrency in Ada_, Cambridge University Press, ISBN 0-521-62911-X
* Colin Atkinson：_Object-Oriented Reuse, Concurrency and Distribution: An Ada-Based Approach_, Addison-Wesley, ISBN 0-201-56527-7
* Grady Booch，Doug Bryan：_Software Engineering with Ada_, Addison-Wesley, ISBN 0-8053-0608-0
* Daniel Stubbs，Neil W. Webre：_Data Structures with Abstract Data Types and Ada_, Brooks Cole, ISBN 0-534-14448-9
* Pascal Ledru：_Distributed Programming in Ada with Protected Objects_, Dissertation.com, ISBN 1-58112-034-6
* Fintan Culwin：_Ada, a Developmental Approach_, Prentice Hall, ISBN 0-13-264680-3
* John English，Fintan Culwin：_Ada 95 the Craft of Object Oriented Programming_, Prentice Hall, ISBN 0-13-230350-7
* David A. Wheeler：_Ada 95_, Springer-Verlag, ISBN 0-387-94801-5
* David R. Musser，Alexander Stepanov：_The Ada Generic Library: Linear List Processing Packages_, Springer-Verlag, ISBN 0-387-97133-5
* Michael B. Feldman：_Software Construction and Data Structures with Ada 95_, Addison-Wesley, ISBN 0-201-88795-9
* Simon Johnston：_Ada95 for C and C++ Programmers_, Addison-Wesley, ISBN 0-201-40363-3
* Michael B. Feldman，Elliot B. Koffman：_Ada 95_, Addison-Wesley, ISBN 0-201-36123-X
* Nell Dale，Chip Weems，John McCormick：_Programming and Problem Solving with Ada 95_, Jones & Bartlett Publishers, ISBN 0-7637-0293-5
* Nell Dale，Susan Lilly，John McCormick：_Ada Plus Data Structures: An Object-Based Approach_, Jones & Bartlett Publishers, ISBN 0-669-41676-2
* Bruce C. Krell：_Developing With Ada: Life-Cycle Methods_, Bantam Dell Pub Group, ISBN 0-553-09102-6
* Judy Bishop：_Distributed Ada: Developments and Experiences_, Cambridge University Press, ISBN 0-521-39251-9
* Bo Sanden：_Software Systems Construction With Examples in Ada_, Prentice Hall, ISBN 0-13-030834-X
* Bruce Hillam：_Introduction to Abstract Data Types Using Ada_, Prentice Hall, ISBN 0-13-045949-6
* David Rudd：_Introduction to Software Design and Development With Ada_, Brooks Cole, ISBN 0-314-02829-3
* Ian C. Pyle：_Developing Safety Systems: A Guide Using Ada_, Prentice Hall, ISBN 0-13-204298-3
* Louis Baker：_Artificial Intelligence With Ada_, McGraw-Hill, ISBN 0-07-003350-1
* Alan Burns，Andy Wellings：_HRT-HOOD: A Structured Design Method for Hard Real-Time Ada Systems_, North-Holland, ISBN 0-444-82164-3
* Walter Savitch, Charles Peterson：_Ada: An Introduction to the Art and Science of Programming_, Benjamin-Cummings Publishing Company, ISBN 0-8053-7070-6
* Mark Allen Weiss：_Data Structures and Algorithm Analysis in Ada_, Benjamin-Cummings Publishing Company, ISBN 0-8053-9055-3

## Ada 的百科

### 總體資訊

* Ada@Krischik（頁面存檔備份，存於網際網路檔案館）

### 輔助工具書

* Ada Programming（頁面存檔備份，存於網際網路檔案館）
* Programación en Ada（頁面存檔備份，存於網際網路檔案館）
* Programmation Ada（頁面存檔備份，存於網際網路檔案館）

### 工程

* AdaCL（頁面存檔備份，存於網際網路檔案館）
* wikibook-ada（頁面存檔備份，存於網際網路檔案館）
* ASIS（頁面存檔備份，存於網際網路檔案館）
* GLADE（頁面存檔備份，存於網際網路檔案館）
* Florist（頁面存檔備份，存於網際網路檔案館）

## 參考文獻

## 外部連結

* Ada World
* AdaPower（頁面存檔備份，存於網際網路檔案館）
* The Web Site for Ada（頁面存檔備份，存於網際網路檔案館）
* ACM SIGAda（頁面存檔備份，存於網際網路檔案館）
* Ada-Europe Organization（頁面存檔備份，存於網際網路檔案館）
* Ada Information Clearinghouse（頁面存檔備份，存於網際網路檔案館）
* ISO Home of Ada Standards（頁面存檔備份，存於網際網路檔案館）
* Ada 95 Books Available Online（頁面存檔備份，存於網際網路檔案館）
* Ada Rapporteur Group (evolution of standard)（頁面存檔備份，存於網際網路檔案館）
* Ada Answers - Building better software with Ada（頁面存檔備份，存於網際網路檔案館）
* Ada Academic Initiative
* "Libre" Ada Software（頁面存檔備份，存於網際網路檔案館）
* GNU Ada Homepage（頁面存檔備份，存於網際網路檔案館）
* GNAVI Ada Visual RAD（頁面存檔備份，存於網際網路檔案館）
* Citations from CiteSeer（頁面存檔備份，存於網際網路檔案館）
* GNAT（頁面存檔備份，存於網際網路檔案館）
* AdaGIDE, the Ada GNAT Integrated Development Environment for Windows
* Forum
* Ada Tutorial
* Projects Using Ada（頁面存檔備份，存於網際網路檔案館）
* A#: Ada on .NET（頁面存檔備份，存於網際網路檔案館）
* Conference announcements for the international Ada community（頁面存檔備份，存於網際網路檔案館）