Ada

维基百科,自由的百科全书

跳转到: 导航, 搜索

Ada,是一种程序设计语言。源于美国军方的一个计划,旨在整合美军系统中运行着上百种不同的程序设计语言编写的程序,命名是為了紀念愛達·勒芙蕾絲而使用Ada。


目录

[编辑] 重要特征

Ada语言最早是针对嵌入式和实时系统设计的,并且在今天依然在这方面使用广泛。Ada95版,是由INTERMETRICS公司的塔克·塔夫特于92到95年间设计的,当时主要是希望改进对于 系统,数字,财务软件编程的支持。

Ada语言的重要特征就是其键入式风格,模块化设计,编译检查,平行处理,异常处理及泛型编程。Ada在95年加入了对面向对象设计的支持,包括动态分配等。

Ada的编译检查主要是针对没有分配的内存读写的保护,堆栈溢出错误,单个错误空闲,队列读写错误以及其他可以避免的小问题。这些检查可以在为增加效率的情况下被取消,但是在编译的时候他们却能带来很高的效率。同样它也包括对程序的严正的设置。因为这些原因,它被广泛应用于一些非常重要的系统中,例如航空电子学,武器及航天飞行器的操作系统中。

同样它支持很多的编译时间检查,这些检查被用来避免一些错误的发生。这种错误往往是在其他语言中在运行以前都不能被察觉到的,需要在源码中加入特殊的检查设置才能被发现。

Ada的动态内存管理非常安全和高规格,它类似于JAVA语言却不同于C语言的。这种特殊功能并不需要特殊的运行设置。尽管这种语言的语意结构允许对于不能读写的目标进行自动的碎片搜集,但是大多数运行都不支持它。Ada却支持有限形式基于区域的存储管理。无效的读写常在运行时候被检查出来(除非这种检测被人为关闭)并且有时候在编译时候就被发现。

Ada语言的定义同国际标准化组织(ISO)的标准有很大不同,因为他是一个自由内容形式的。这种做法的后果是被广大程序员只能从它的标准化文档(普遍认为是Ada的参考使用手册(ARM))寻找细节性的技术问题,但是普遍情况是一本标准教科书却可以在其他不同语言上使用。

Ada语言由严格的巴斯特范式定义,但是不适合一般人阅读.它是第一种同时拥有IEC/ISO/美国军用标准认证的语言.其编译器经过严格的审查,以确保同样的代码在任一编译器上产生同样的可执行效果.并且保证并行性在代码级可以在无操作系统下同样运行

[编辑] 历史

70年代美国国防部 因为它所属项目的编程语言数量而倍受关注。这些语言中的很多都是完全独立于硬件的,并且其中没有一个是支持安全模块编程的。1975年 高次阶语言工作组 (HOLWG) 终于成立了。它的主要目标就是寻找或者创造一些适合国防部需要的语言来减少这种现存的编程语言数量。它带来的结果就是Ada语言。因此,这些编程语言数量从1983 的450下降到了1996的37种。

Wikisource-logo.svg
http://zh.wikisource.org/wiki/en:Steelman language requirements

工作组开发出了语言要求文档—文档。许多现存的语言都被仔细地检查,但是1977年 这个团队却声称没有任何现存语言符合他们的条件。

[编辑] Ada语言的"世界,你好!" 示例程序

一个Ada语言编写的"你好世界"Hello world program程序:

with Ada.Text_IO; 
 
procedure Hello is
begin
    Ada.Text_IO.Put_Line("Hello, world!");
end Hello;

Ada.Text_IO.Put_Line处有一些快捷图标,不需要很多的文字输入,但是对于这里的理解来讲并没有多大意义。细节性的问题請参考Ada Programming/Basic

[编辑] 关于阿利亚纳五号的失败

一个普遍的关于欧洲空间局阿利亚纳五号火箭失败的说法是因为 Ada 语言在编译过程的检查失败导致的。 将大的浮点数转换成整数是一种常见的程序错误来源。1996年6月4日,对于Ariane 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位有符号整数时,产生了溢出。 溢出值测量的是火箭的水平速率,这比早先的Ariane 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;

参考阿利亚纳五号

[编辑] 参见

[编辑] 参考书目

[编辑] 国际标准

[编辑] 书目

Wikibooks-logo.svg
您可以在維基教科書中查找此百科条目的相關電子教程:

[编辑] Ada的百科

[编辑] 总体信息

[编辑] 辅助工具书

[编辑] 工程

[编辑] 注释


[编辑] 外部连接

Template:Major programming languages small



Original-Page: Ada - 维基百科,自由的百科全书
 Web-Blaster V2.21 Close Webblaster Floater
The page now displayed was connected to the database of the Assoziations-Blaster (Deutsche Version) through filtering it with the Web-Blaster.

The whole process takes place in real time and no data from other servers is saved anywhere.

In order to see this page without the filter and loaded from its original server, the Webblaster must be turned off.

Turn Off Webblaster