Ada
Ada,是一种程序设计语言。它源于美国国防部在二十世纪七十年代的计划,旨在整合美军系统程序设计语言,而当时美军系统运行着上百种不同的程序设计语言,并提高除錯能力和效率,由Pascal及其他语言扩展而成,接近自然語言和数学表达式,用「Ada」命名以纪念()。
多范式 | |
設計者 |
|
1980年 | |
穩定版本 | |
預覽版本 | Ada 2012 TC1[3]
( 2015年4月
) |
型態系統 | 静态、强类型、安全、标明 |
作業系統 | 跨平台 |
網站 | http://www.adaic.org/ |
主要實作產品 | |
AdaCore GNAT, Green Hills Software Optimising Ada 95 compiler, | |
衍生副語言 | |
SPARK、 | |
啟發語言 | |
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语言最早针对嵌入式和设计,至今依然在这些领域广泛使用。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;
关于阿丽亚娜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代码如下:
begin
sensor_get(vertical_veloc_sensor);
sensor_get(horizontal_veloc_sensor);
vertical_veloc_bias := integer(vertical_veloc_sensor);
horizontal_veloc_bias := integer(horizontal_veloc_sensor);
...
exception
when numeric_error => calculate_vertical_veloc();
when others => use_irs1();
end;
参考书目
国际标准
- 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
书目
維基教科書中的相關電子:Ada Programming |
- 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 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页面存档备份,存于