Ada是什么?
Ada是什么?
Ada,是一种程序设计语言。源于美国军方的一个计划,旨在整合美军事系统中运行着上百种不同的程序设计语言。其命名是为了纪念世界上第一位程序员Ada Lovelace。Ada不仅体现了许多现代软件的开发原理,而且将这些原理付诸实现。同时,Ada语言的使用可大大改善软件系统的清晰性、可靠性、有效性、可维护性。Ada是现有的语言中无与伦比的一种大型通用程序设计语言,它是现代计算机语言的成功代表,集中反映了程序语言研究的成果。Ada的出现,标志着软件工程成功地进入了国家和国际的规模。在一定意义上说,Ada打破了John von Neumann 思维模式的桎梏,连同Ada的支持环境(APSE)一起,形成了新一派的Ada文化。它是迄今为止最复杂、最完备的软件工具。Ada曾是美国国防部指定唯一可用于军用系统开发的语言。
Ada是怎么面世的?
1974 年时,美国国防部(DoD)意识到开发和维护嵌入式系统(固化在硬件中的系统,如导弹弹导系统)耗费了过多的时间,精力和资金。
当时,在使用的计算机语言有 450 多种,这增加了开发新系统以及培训程序员使熟悉现有系统的时间和成本。维护工作也由于没有标准化的工具(编辑器,编译器等)而受阻。所有这些因素使 DoD 意识到它需要一门强大的语言,能被所有嵌入式电脑供应商使用。
开发工作始于 1975 年,当时 DoD 列举了一系列的语言需求;但没有一门现有语言指定了这些特性,因此在 1977 年,DoD 起草了一份建议,开发一门新的语言。不像COBOL 这些语言由专门的委员会制定,新语言是一场竞争的主题,在产业界和学术界的评估中产生。
在众多竞争者当中,有 4 家被选中以完成进一步的工作。最终只剩下 Cii-Honeywell Bull 公司。这门语言被命名为 Ada。设计小组由 Jean Ichbiah 领导,对语言全权负责。
在 1983,Ada 成为了一个 ANSI 标准 ANSI/MIL-STD-1815A。此年成为一个 ISO 标准。在参考手册中定义的语言通常称为 LRM 或 ARM(Ada Reference Manual)。在Ada 的相关书籍和编译器的报错信息中经常出现手册内容的引用。对于任何 Ada 站点,参考手册都是推荐的;虽然很难阅读,但它是所有 Ada 问题的最权威解释(一个小组正在澄清语言定义中已发现的语义不清的内容)。
Ada 也经过了一次修正,即 1995 的新的 ISO 标准。新标准修正了 Ada83 的很多缺陷,并进一步扩展了它的功能(在修正工作中,有个临时的标准,即 Ada9x,不少 Ada 文章是在 这段时间写的,因此有些内容在细节上可能与 Ada95 有所区别,但主要原理差不多)。
为了防止 Ada 编译器的不兼容版本的扩散,Ada Joint Program Office (控制 Ada 语言的执行部门,于 1998 年 10 月 1 日关闭,见 Ada Joint Program Office closed) 采取了不寻常的做法 – 他们注册 Ada 商标。除非通过他们的兼容性测试,编译器厂商不允许出售 ‗Ada‘ 编译器。这在不久以后放松了,保护协议变成了 `Validated Ada‘。因而产生的 Ada 确认证书被限制在一定的时间内并有一个期满时间。当时间过期后,该编译器不能再被标记为`Validated Ada‘ 编译器。通过这种方式,AJPO 确保当前市场上的编译器与当前标准相一致。
目标是使所有的 Ada 程序能在所有系统上被编译-在这点上,AJPO 比其它语言小组做得好。
时间表
1975年4月,HOLWG工作组成立后先制订了Strawman语言要求系列文档,以祈将国防部高级语言的需求规划化。8月,更新为Woodenman版;
1976年1月更新为Tinman版,1977年1月更新为Ironman版,最终于1978年6月制订出Steelman语言要求系列文档。期间工作组对众多编程语言正式进行检讨,结果发现现存语言中并无任何一种能符合文档规格。工作组亦曾向四个分别以红(Benjamin Brosgol等)、绿(Jean Ichbiah等)、蓝(John Goodenough等)、黄(Jay Spitzen等)为名的承包商发出聘任,请求他们提供发展暂新程式设计语言的建议。
1978年4月,红组与绿组的建议在大众注目下均通过并进阶。
1979年5月,Jean Ichbiah率领的绿组建议方案被釆纳并被命名为Ada,纪念计算机程序创始人Ada Lovelace。
1979年6月,Ada语言的设计初步参考手册由ACM在SIGPLAN Notices杂志上发表。
1979年10月,Ada语言在波士顿举行了公开测试和评估会议;因应会议后修正的需求说明Stoneman版文档于1980年2月发布。
1980年7月,Ada的修订版完成;军事标准参考手册于12月获得批准,并被授予Ada Lovelace出生年份数字1815命名为MIL-STD 1815。
1982年7月,Ada另一个修订版本的参考手册发布。
1983年,美国国家标准学会(ANSI)对Ada语言进行了标准化,Gerhard Goos和Juris Hartmanis对此最终版本进行了说明。
1983年4月,纽约大学采用高格别SETL的Ada/Ed编译器首次执行Ada语言验证,随后多间商业机构加入提供Ada编译器和相关开发工具行列。
1991年开始,美国国防部要求所有软件运用必用Ada语言。 1997年,此规则被撤回。
Ada语言为什么会被广泛运用?
Ada语言最早是针对嵌入式和实时系统设计的,并且在现今依然在这些方面广泛使用。Ada95版,是由INTERMETRICS公司的塔克·塔夫特于1992到1995年间设计的,当时主要是希望改进对于系统、数字、财务软件编程的支持。
Ada语言的重要特征就是其嵌入式风格,模块化设计,编译检查,平行处理,异常处理及泛型编程。Ada在95年加入了对面向对象设计的支持,包括动态分配等。
Ada的编译检查主要是针对没有分配的内存读写的保护,堆栈溢出错误,单个错误空闲,队列读写错误以及其他可以避免的小问题。这些检查可以在为增加效率的情况下被取消,但是在编译的时候他们却能带来很高的效率。同样它也包括对程序的严正的设置。因为这些原因,它被广泛应用于一些非常重要的系统中,例如航空电子学,武器及航天飞行器的操作系统中。
同样它支持很多的编译时间检查,这些检查被用来避免一些错误的发生。这种错误往往是在其他语言中运行之前难以被察觉到的,需要在源码中加入特殊的检查设置才能被发现。
Ada的动态内存管理非常安全和高规格,它类似于JAVA语言却不同于C语言的。这种特殊功能并不需要特殊的运行设置。尽管这种语言的语意结构允许对于不能读写的目标进行自动的碎片搜集,但是大多数运行都不支持它。Ada却支持有限形式基于区域的存储管理。无效的读写常在运行时候被检查出来(除非这种检测被人为关闭)并且有时候在编译时候就被发现。
Ada语言的定义同国际标准化组织(ISO)的标准有很大不同,因为他是一个自由内容形式的。这种做法的后果是被广大程序员只能从它的标准化文档(普遍认为是Ada的参考使用手册(ARM))寻找细节性的技术问题,但是普遍情况是一本标准教科书却可以在其他不同语言上使用。
Ada语言由严格的巴斯特范式定义,但是不适合一般人阅读.它是第一种同时拥有IEC/ISO/美国军用标准认证的语言.其编译器经过严格的审查,以确保同样的代码在任一编译器上产生同样的可执行效果,并且保证并行性在代码级可以在无操作系统下同样运行。
与 C 和 C++ 有什么不同?
由于 Ada 出生年月迟了一点,而且目前的操作系统基本上由 C,C++ 写成,导致 Ada 在―平民层‖的推广比较糟糕,至今还不是很流行,Why Ada isn‘t Popular 一文对此有比较详细的解释。而 Ada 爱好者们为了显示 Ada 的优越性(这种心情相当能理解),将 Ada 与 C,C++ 做了一系列比较,其结果反正综和指数都是 Ada 高,这方面文章有不少,如 Comparing Development Costs of C and Ada,Contrasts: Ada 95 & C++。在这里,我们只初略地了解一下 Ada 的优势即可,在读者朋友接下去的学习中,应该是能从心里感受到 Ada 的优点。1. 更高的安全性、可靠性。Ada 中对于访问内存、数值计算等很多方面有一些严格的规定,而没有 C 和 C++ 那么自由;程序的错误绝大部份能在编译和运行时检测到,以至于可以不需要编译器,另外,语言也包含异常特性,能方便地处理错误。
2. 更高的移植性。在 Unix 和 Windows 下有 C 编程经验的朋友应该对于兼容性深有体会,很多代码纯粹是为了适应不同的系统增添的,对于实际工作没多大用处。但 Ada 的初始语言环境中就有了异常(约等于 Unix 下的 Signal)、任务(线程)、分布式计算、随机数产生、宽字符集很多特性的支持,而在现在的具体操作系统中,这些特性往往随系统而异。即使 Ada95 里缺少一些功能,也可以通过额外标准和函数库来弥补:GDI 库,可以用 GtkAda,在 Windows 和X 下通用;Ada 也有一个 Posix 接口的标准,可以使用函数库 Florist 来调用 Posix 的函数……用户层是大大省力—只要自己的操作系统上有所需的编译器和函数库即可。
3. 语法明确,基本上没有令人混淆的地方。Ada 程序的源代码远远比 C 或 C++ 的代码易懂。看程序的人是减轻了不少脑负担。
4. ……
5. ……
……
总之,C 和 C++ 能做的 Ada 肯定能做,但 Ada 要省时方便的多。读者在学习 Ada之后,无需多说也就明白了,笔者在初学 Ada 时就有耳目一新的感觉,唯一的遗憾是 Ada 不流行。