关于Ada语言

“Ada语言最初设计是为了构建长周期的、高度可靠的软件系统。它提供了一系列功能来定义相关的数据类型(type)、对象(object)和操作(operation)的程序包(package)。程序包可以被参数化,数据类型可以被扩展以支持可重用库的构建。操作既可以使用方便的顺序控制结构,通过子程序(subprogram)来实现,也可以通过包含并发线程同步控制的入口(entry)来实现。Ada 也支持单独编译(separatecompilation),在物理层上支持模块性。

Ada包含了很复杂的功能以支持实时(real-time),并发程序设计(concurrentprogramming)。错误可以作为异常(exception)来标示,并可以被明确地处理。Ada 也覆盖了系统编程(systemprogramming);这需要对数据表示和系统特性访问的精确控制。最后,提供了预定义的标准程序包,包括输入输出、字符串处理、数值计算的基本函数和随机数生成。”

——译自《Ada Reference Manual》

Section1:General

Ada是一种表现能力很强的通用程序设计语言,它是 DoD(美国国防部)为克服软件开发危机,耗费巨资,历时近 20年研制成功的。它被誉为第四代计算机语言的成功代表。与其他流行的程序设计语言不同,它不仅体现了许多现代软件的开发原理,而且将这些原理付诸实现。因此,Ada 语言的使用可大大改善软件系统的清晰性、可靠性、有效性、可维护性。Ada是现有的语言中无与伦比的一种大型通用程序设计语言,它是现代计算机语言的成功代表,集中反映了程序语言研究的成果。Ada的出现,标志着软件工程成功地进入了国家和国际的规模。在一定意义上说,Ada还刺破了“冯.偌依曼思维模式” (Von Newman Mind-set) 的桎梏,连同 Ada的支持环境(APSE)一起,形成了新一派的所谓 Ada 文化。它是迄今为止 最复杂,最完备的软件工具。Ada 语言曾是 DoD指定的唯一的一种可用于军用系统开发的语言,我国军方也将 Ada 做为军内开发标准(GJB1383《程序设计语言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、2005 的新的 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 的一系列特性。Ada 最初设计就是一门大型语言,因此在很多编程的重要问题上都有所考虑。

“Ada最初设计时关注于 3个最重要的问题:程序的稳定性和可维护性,程序设计和人的行为接近,并且高效。这份语言的修订版是为了提供更大的灵活性和扩展性,存储管理的额外控制和同步,以及标准化的程序包以支持重要的应用程序领域,同时保留原来的重点:稳定性,可维护性,和高效。对于程序设计语言促进可靠性和简化维护难度的需求已被确立。因此程序可读性的重要性高于轻松地写代码。例如,语言规则要求程序变量应当明确声明并指定它们的类型。由于变量的数据类型是不变的,编译器可以确保对于变量的操作适用于该类型的对象。另外,有错误倾向的符号已经避免,并且语言语法避免了编码形式的使用,使更倾向于英语的结构。最后,Ada语言提供了程序单元单独编译的功能,使程序开发和维护简便,同样也提供了在一个单元内多个单元之间的检测。考虑人类程序员的问题也在设计时被强调。总而言之,在继续避免过多复杂句型的缺陷的同时,尝试以一致系统的方式保持相对较少的底层概念。”--摘自《 Ada Reference Manual》

上面的文字还是过分抽象,但 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 dynamicbinding),因此错过了对象技术革命的船,而在80年代流行使用面向对象的语言。当时,Smalltalk是很流行的面向对象语言,并且速度相当慢,因为它是一门解释性语言。令人伤心的是,很多人至今没注意到这点,并得出结论:面向对象程序设计使你的程序效率低下;这就压制了包含面向对象特性到确定性的实时语言中去的想法。(例如:在 SIGAda *今年*(1998)有人打电话询问,解释说他是搞时实时系统的,他想明白他是否要担心面向对象程序设计!有些谣言实在顽固。)

6)政府的管制。国防部对于Ada 的开发介入比较多,其中有些做法令人比较不满。同时挂着美国国防部名头的语言,可能给人两种感觉:1.出于对政府的不满,将气也出到 Ada头上,认为 Ada 只是政府作的东西,不怎么样;2.国防部的语言,跟我们这些民用程序程序没什么关系。可以说,由于对于 Ada 的误解,致使目前Ada 还很不流行。

有些人认为Ada的末日就要到来,事实上Ada并没有消亡,仍然用于各种领域。

Ada的应用范围包括从硬实时的处理到商业化的桌面工具。其用户包括小至初学者,大至公司,和遍及全世界的政府机构,私有机构以及学术界等。

Ada语言已在安全性敏感的领域里显示了其不一般的力量,尤其是在交通运输业中。美国航空电子宇航系统部,使用Ada开发空中客车A340的飞行警报系统(FWS)。波音公司的777飞机大量使用了Ada语言,而且准备在具有最高安全性适航证书级别(DOl78bA和B级)的软件中继续使用该语言。Ada在地铁中也有应用,如伦敦Jubilee;巴黎地铁最近的延伸段;纽约地铁的Camarsie线;法国的高速火(TGV)和欧洲、亚洲以及拉美的地铁轨道系统。还有在商业船用控制中也有它的应用。

Ada在其它领域像电视、娱乐业、医学计算、通信网络开关、金融和信息系统都得到了应用。它也应用于含有高安全性核反应堆的工业控制中和桌面软件中。当然Ada象往常一样使用于美国和联合国的军事项目中。像NASA和欧洲空间办事处之类的非军事政府机构也使用Ada。美国第四代战斗机F-22的500多万行代码中,有80%是采用ada,F-35内嵌的800多万行代码全部使用Ada。在当今世界和外层空间中有数亿行的Ada的代码在使用。

未经允许不得转载:SuperMan's blog » 关于Ada语言

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址