-- 什么是 Ada ? --
Ada是一种表现能力很强的通用程序设计语言,它是美国国防部为克服软件开发危机,耗费巨资,历时近20年研制成功的。它被誉为 第四代计算机语言的成功代表。与其他流行的程序设计语言不同,它不仅体现了许多现代软件的开发原理,而且将这些原理付诸实现。因此,Ada语言的使用可大大改善软件系统的 清晰性, 可靠性, 有效性, 可维护性。Ada是现有的语言中无与伦比的一种 大型通用程序设计语言,它是现代计算机语言的成功代表,集中反映了 程序语言研究的成果。 Ada的出现,标志着软件工程成功地进入了国家和国际的规模。在一定意义上说,Ada还刺破了“冯.偌依曼思维模式” (Von Newman Mind-set) 的桎梏,连同Ada的 支持环境(APSE)一起,形成了新一派的所谓 Ada文化。它是迄今为止 最复杂,最完备的软件工具。 Ada语言是 美国国防部指定的 唯一的一种可用于 军用系统开发的语言,我国军方也将Ada做为军内开发标准(GJB 1383《程序设计语言Ada》)。
--------------------------------------------------------------------------------
-- 为什么称作 Ada --
美国国防部之所以把这种语言取名为Ada,是为了纪念奥左斯特. 艾达.洛夫莱斯伯爵夫人 (Augusta Ada Lovlace 1815-1852),她是英格兰诗人拜伦(Byron)勋爵的女儿,曾对现代计算机技术之父查尔斯.巴贝奇(Charles Babage)的笔记,手稿进行了整理和修正。从某种意义上说,她是世界上第一位计算机程序员。
--------------------------------------------------------------------------------
-- 为什么使用 Ada? --
在明白这个问题之前,需要了解 Ada 的一系列特性。Ada 最初设计就是一门大型语言,因此在很多编程的重要问题上都有所考虑,以下文字摘自《 Ada Reference Manual》:
Ada 最初设计时关注于 3 个最重要的问题:程序的稳定性和可维护性,程序设计和人的行为接近,并且高效。这份语言的修订版是为了提供更大的灵活性和扩展性,存储管理的额外控制和同步,以及标准化的程序包以支持重要的应用程序领域,同时保留原来的重点:稳定性,可维护性,和高效。对于程序设计语言促进可靠性和简化维护难度的需求已被确立。因此程序可读性的重要性高于轻松地写代码。例如,语言规则要求程序变量应当明确声明并指定它们的类型。由于变量的数据类型是不变的,编译器可以确保对于变量的操作适用于该类型的对象。另外,有错误倾向的符号已经避免,并且语言语法避免了编码形式的使用,使更倾向于英语的结构。最后,Ada 语言提供了程序单元单独编译的功能,使程序开发和维护简便,同样也提供了在一个单元内多个单元之间的检测。考虑人类程序员的问题也在设计时被强调。总而言之,在继续避免过多复杂句型的缺陷的同时,尝试以一致系统的方式保持相对较少的底层概念。
上面的文字还是过分抽象,但 Ada 的以下特性几乎是公认的:
易读性---专业人员往往要读很多程序,因此要避免像 APL 那种以过于简单的符号编程的语言,虽然它们的编程速度快,但基本上是不可读的。因此目前有种说法是:读一个程序比写类似的程序还要费时,这也是有一定道理的;特别是 C/C++ 的风格比较松散,很多语法都在滥用,使程序可读性相当低,由于 Ada 的语法接近人的语言,即使是初学者,也不会感到很难读懂。
强类型---保证了每个对象有明确定义的值域,并防止了不同概念的逻辑混淆。许多错误可以被编译器发现,而对于其它语言来说,则可能导致一个不正确的程序。
异常处理---实际中,一个程序不可能保证它的正确性;因此,通过异常机制及分块结构,将错误发生的影响控制在某一特定领域。
抽象数据类型---将数据描述的细节同基于该类型数据的操作相分离,以提高可移植性和可靠性。
多任务---使程序变成一系类的并发活动,而不是单一的顺序活动;这在很多领域,特别是对于服务器程序来说有重要意义,这比调用操作系统提供的功能更有易可移植性和可靠性。
类属单元---很多情况下,程序的某逻辑部份与运行时值的类型无关。因此,需要提供一种机制,从一个样板中产生多个相应的程序段,以提高代码的可重用性。
大型编译---封装机制,单独编译及程序包的分层机制等对于编写大规模的程序来说是必不可少的。
--------------------------------------------------------------------------------
-- 为什么 Ada 不流行? --
1) 一些知名人物狠批了 Ada 一顿。Tony Hoare 在他的图灵奖的演讲中将 Ada 狠贬了一顿,从字面上说就是:如果我们使用 Ada,人类的前途将很危险。但他的批评似乎有点过时了。他所说的多种将使地球上的生物完蛋的事物之一就是使用异常!虽然异常会被滥用,但这是所有语言特性共有的毛病,并且,现在,每个人似乎都认为异常是一个很不错的主意。Ada 在 1983 年以前没有标准化,而 Hoare 的讲话是在 1980 年。Ada 语言从 1980 的草案到 1983 年的最终版本,变化还是相当大。Parnas, Dijkstra 也批评 Ada 语言,特别是它的规模,Hoare 的言论可能影响了 ACM 的投票人,以致在投票中反对 Ada 语言。
2) 大部份程序员还无法接受 Ada 的一些设计。如在程序运行时发现错误,再用调试器去寻找和修正错误是编程的正常方法。他们不知道很多错误可以由编译器检测,并且,他们知道,没必要这样做,因为修正错误相当具有挑战性,可以说有点有趣。因此,对于新特性的不解,也就将 Ada 贬了一顿。
3) 早期编译器过分昂贵,并且编译器(直至今天)很难实现。作为语言设计者,Jean Ichbiah 对于语言的具体实现关注不够。(作为对比,Tucker 是编译器程序员的语言设计者。)对此的明显的一个回应就是没有便宜的编译器(在 US$50 - US$100 之间)你能在家里的 PC 上运行,所以没人可体验 Ada 语言。Ada 本就错过了 PC 革命的大船,并且没有可能和 Pascal,C 一样有群众基础(因为这些语言相对来说实现较简单,因此更加容易的存在) (更少的播放时间)。市场只选择实用性,编译器的成本比语言本身的质量更加重要。这可能不是很明智的选择,因为人力劳动来除错所消耗的成本远大于编译器,但因为在业界这没有度量标准,决策制定者不知道这些。
4) 整个业界都致力于销售弥补 C 语言缺陷的软件,如寻找内存泄漏,类型错误等。像 Les Hatton 他们要维护自己的既得利益,这样就要维护事情的原样,因为他们的生计依赖于那些使用错误较多的语言的人。当你告诉他们,如果使用 Ada,他们可以扔掉其它工具时,这些人不会站在你这边,因为对他们而言吃饭比新技术更重要。
5) Ada 83 没有类型扩展和动态联编(type extension and dynamic binding),因此错过了对象技术革命的船,而在80年代流行使用面向对象的语言。当时,Smalltalk 是很流行的面向对象语言,并且速度相当慢,因为它是一门解释性语言。令人伤心的是,很多人至今没注意到这点,并得出结论:面向对象程序设计使你的程序效率低下;这就压制了包含面向对象特性到确定性的实时语言中去的想法。(例如:在 SIGAda *今年*(1998) 有人打电话询问,解释说他是搞时实时系统的,他想明白他是否要担心面向对象程序设计!有些谣言实在顽固。)
6)政府的管制。国防部对于 Ada 的开发介入比较多,其中有些做法令人比较不满。同时挂着美国国防部名头的语言,可能给人两种感觉:1.出于对政府的不满,将气也出到 Ada 头上,认为 Ada 只是政府作的东西,不怎么样;2.国防部的语言,跟我们这些民用程序程序没什么关系。可以说,由于对于 Ada 的误解,致使目前 Ada 还很不流行。