Ada
編程範型 | 多範式 |
---|---|
設計者 |
|
面市時間 | 1980年 |
型態系統 | 靜態、強型別、安全、標明 |
作業系統 | 跨平台 |
網站 | http://www.adaic.org/ |
主要實作產品 | |
AdaCore GNAT, Green Hills Software Optimising Ada 95 compiler, | |
衍生副語言 | |
SPARK、Ravenscar profile | |
啟發語言 | |
ALGOL 68, Pascal, C++(Ada 95), Smalltalk(Ada 95), Modula-2 (Ada 95) , Java(Ada 2005),Eiffel(Ada 2012) | |
影響語言 | |
C++, Eiffel, PL/SQL, VHDL, Ruby, Java | |
|
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語言的範例程式
[編輯]with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is
begin
Put_Line("Hello, world!");
end Hello;
在Ada.Text_IO.Put_Line處有一些捷徑,不需要很多的文字輸入,但是對於這裡的理解來講並沒有多大意義。細節性的問題請參考Ada Programming/Basic。
判定一個字串是否為回文的函式(遞迴):
-- 判定一个字符串是否是回文
function is_palindrome(str : in String) return Boolean is
len : Natural := str'Length;
begin
if len <= 1 then
return True;
elsif Element(To_Unbounded_String(str), 1) = Element(To_Unbounded_String(str), len) then
declare
new_str : String(1..len-2);
begin
new_str := Slice(Source => To_Unbounded_String(str),
Low => 2,
High => len - 1);
return is_palindrome(str => new_str);
end;
else
return False;
end if;
end is_palindrome;
定義一個函式用來判定一字串是否為回文:
-- 判定一个字符串是否是回文
function is_palindrome(str : in String) return Boolean is
len : Natural := str'Length;
begin
for i in 1 .. len / 2 loop
if Element(To_Unbounded_String(str), i) /= Element(To_Unbounded_String(str), len - i + 1)
then
return False;
end if;
end loop;
return True;
end is_palindrome;
參見
[編輯]參考書目
[編輯]國際標準
[編輯]- 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 Programming(頁面存檔備份,存於網際網路檔案館)
- Programación en Ada(頁面存檔備份,存於網際網路檔案館)
- Programmation Ada(頁面存檔備份,存於網際網路檔案館)
工程
[編輯]- AdaCL(頁面存檔備份,存於網際網路檔案館)
- wikibook-ada(頁面存檔備份,存於網際網路檔案館)
- ASIS(頁面存檔備份,存於網際網路檔案館)
- GLADE(頁面存檔備份,存於網際網路檔案館)
- Florist(頁面存檔備份,存於網際網路檔案館)
參考文獻
[編輯]- ^ Technical Corrigendum for Ada 2012 published by ISO. Ada Resource Association. 2016-01-29 [2016-02-23]. (原始內容存檔於2016-03-04).
- ^ Consolidated Ada 2012 Language Reference Manual. Ada Conformity Assessment Authority. [2016-02-23]. (原始內容存檔於2016-03-03).
|url-status=
和|dead-url=
只需其一 (幫助) - ^ Technical Corrigendum 1 for Ada 2012. Ada Conformity Assessment Authority. [2016-02-23]. (原始內容存檔於2016-03-02).
|url-status=
和|dead-url=
只需其一 (幫助)
外部連結
[編輯]- 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(頁面存檔備份,存於網際網路檔案館)