Ada 仍然是计算机编程语言中的罗德尼·丹泽菲尔德,尽管其存在有坚实的技术理由,但仍然没有得到多少尊重。 Ada 最初在 1970 年代后期被美国国防部投入使用,如今只被认为是臃肿的军事工程实践的残余。
实际上,Ada 有助于提高软件可靠性,尽管这种好处确实是以增加一些可能令人不快的软件工程工作为代价的,例如增加设计时间和文档开销。 然而,在一个软件开发人员越来越被迫应对导致错误的上市时间压力的世界中,你无法摆脱 Ada 强制执行编译时一致性检查这一事实。 事实上,Ada 编译器应用的一系列和溢出检查通常有助于在软件开发生命周期的早期捕获更多错误,在这些阶段,这些错误更容易且成本更低地修复,当然也更不具有威胁性。
对于 Ada 的倡导者来说,最终结果是,在所有条件相同的情况下,Ada 项目虽然需要付出更多努力,但比用其他语言编写的项目产生更高质量的代码。 也许更重要的是,Ada 程序可以由创建者以外的开发人员维护。 这是因为它们被充分注释。
Ada 的支持者会声称,这种质量在 Ada 投入使用的许多现实世界的软件工作中显而易见。 在高金融领域,Ada 解决方案已应用于瑞士邮政银行电子资金转账系统和巴黎国家银行。
然而,实际上,大多数值得注意的 Ada 项目都是在国防部门开发的,在国防部门,遵守 Ada 强制执行的更好软件设计实践所带来的感知到的额外成本更容易被吸收。 例如,Ball Aerospace 在为美国国防部建造的机密卫星的所谓“黑色计划”部分开发代码期间应用了 Ada。 西科斯基飞机公司也采用了 Ada 来编程黑鹰直升机的控制显示单元。
也许最著名的 Ada 项目甚至不是军事项目,尽管它属于航空航天领域的盟友。 该项目是波音 777 中使用的 AIMS(飞机信息管理系统)。 主要承包商是霍尼韦尔公司,该公司使用了位于亚利桑那州凤凰城的 DDC-I Inc. 提供的 Ada 编译器。
最令人兴奋的新 Ada 项目是波音公司即将推出的 7E7 梦想飞机。 风河和 AdaCore 软件将用于开发 7E7 的通用核心系统,该系统是飞机计算机、网络和接口电子设备的电子和软件骨干。 7E7 通用核心系统由 80 到 100 个同时运行的应用程序组成。 这些应用程序将控制飞机的许多航空电子设备和公用设施功能。
但事实上,Ada 倡导者希望该语言能够在这些专业项目之外得到广泛部署的愿望尚未实现。
在过去的十年中,阻碍 Ada 采用的双重障碍是 Java 和 C++ 的崛起。 C++ 的复杂性(Ada 经常被指责的缺陷)和 Java 的局限性都没有阻止这两种语言获得行业的关注和支持。
还有更糟糕的消息。 根据卡内基梅隆大学软件工程研究所 2003 年的一份报告,“大多数软件工程师认为 Ada 是一种垂死的语言。”1
该报告接着指出:“Ada 主要在国防部社区中使用。 在该社区之外,一些软件开发人员为民用市场采用了它,尤其是在可能存在国防市场交叉或存在类似需求的情况下,例如在商业航空、过程控制和医疗仪器中。 然而,这种商业用途仅占商业软件市场的很小一部分。”
(从好的方面来说,市场研究公司 Venture Development Corp. 估计,2001 年 Ada 软件工具(包括集成开发环境、编译器和调试器)的销售额总计 4770 万美元。 预计到 2006 年,销售额将以每年 0.8% 的年增长率增长。2 VDC 估计,大约有 8,000 到 10,000 名开发人员正在从事嵌入式应用程序的 Ada 固件编写工作。)
尽管看起来是坏消息,但这并不意味着 Ada 没有用武之地。 事实上,Ada 在许多方面都是一种无法被扼杀的语言。 它经历了 Ada83 和 Ada95 的发展。 现在,它可能即将承担新的角色:Ada 正在被推向成为解决软件质量和安全问题的答案,自 9/11 以来,软件质量和安全问题在世界各地都已成为重要议程。
事实上,据长期担任 SofCheck Inc. 总裁的 Ada 专家 Tucker Taft 称:“人们越来越意识到必须采取措施来提高软件的质量和安全性,但是详尽的测试方法相关的成本对于除最关键的系统之外的所有系统来说在经济上都是难以承受的。”3
如果有人有机会通过将 Ada 重新定位为实现更高质量软件的方式来复兴 Ada,那就是 Taft。 他作为 Ada 专家有着悠久的历史,包括 1980 年代在 Intermetrics 担任首席科学家,以及为空军开发 AIE(Ada 集成环境)的工作。 在 1990 年代初期,他领导了 Ada9X 设计团队,该团队制定了 Ada95 的规范,并使其获得批准成为第一个 ISO 标准化的面向对象编程语言。
现在,作为 SofCheck 的创始人,Taft 将他公司的 Inspector 产品定位为一种高可靠性的自动化错误检测器,它依靠静态分析在代码发布之前捕获软件缺陷,而无需制定理论上应成为每个软件验证工作一部分的冗长测试计划。 (当然,在实践中,我们中的许多人都曾在因时间限制和交付代码的巨大压力而忽略此类测试计划或采用临时测试方法的情况下工作。)
Taft 最近在 6 月于西班牙帕尔马-德马洛卡举行的 Ada Europe 2004 会议上提交的一篇论文中阐述了他的立场。 SofCheck 可能有些夸张地认为,未检测到的软件产品错误造成的成本每年高达 600 亿美元,而自动化分析可以大大减少这个数字。
今年早些时候,Taft 在他的演讲中描述了静态分析过程的实用性:“静态分析有可能自动化对源代码进行逐行、全路径缺陷检查的过程,同时还可以根据输入、输出和效果对软件系统进行组件级表征,从而促进对遗留软件的更好理解,并实现更明智的软件演进和重用策略。”
Taft 的技术通过差异诊断来发现缺陷——即通过评估错误发生的周围条件。 具体而言,Inspector 工具扫描源代码,并将堆栈深度、循环计数、动态存储分配、锁定频率和持续时间等数量汇总在一起。
迄今为止,SofCheck 已经与雷神公司、诺斯罗普·格鲁曼公司和联合技术公司等公司合作。 它的 Inspector 是否会在 Ada 的传统领域之外,即国防部门之外获得拥护者,这还是个未知数。
当然,如果任何语言的未来成功都取决于单一产品的采用,那么它就陷入了困境。 但是,那些认为 Ada 已经结束的人最好记住,它以前也曾被排除在外。
展望未来,有几个原因使 Ada 在未来几年内至少在狭窄的领域内继续蓬勃发展成为可能。 最重要的是,在嵌入式和国防软件社区以及学术界,仍然有一小群但根深蒂固的 Ada 支持者。
在前一个领域,除了 Taft 的 SofCheck 之外,Aonix、Green Hills、I-Logix、AdaCore Technologies、RR Software 等公司继续创建和销售新的 Ada 工具。
例如,7 月,位于圣地亚哥的 Aonix 发布了其 Ada 语言 IDE(集成开发环境)的 beta 版本。 该 IDE 名为 AonixADT,基于越来越流行的 Eclipse 开源工具包框架。 最初,该 IDE 将在 Windows 下运行,但 Solaris 和 Linux 版本也即将推出。
一些老牌 Ada 供应商明智地通过扩展其工具以处理多种语言来对冲风险。 例如,AdaCore Technologies 的新 GNAT Pro 5.02a1 IDE 增强了 Ada、C 和 C++ 多语言编程的功能。 该 IDE 可在各种操作系统上运行,并且可以配备许多用于不同目标平台的后端。
另一个成功的策略是拥抱 Linux。 这正是 I-Logix 使用其 Rhapsody in Ada UML(统一建模语言)面向对象建模工具所做的事情。 今年早些时候,该公司发布了在 Red Hat 和 MontaVista Linux 下运行的端口。
Ada 复兴的最大希望可能在于学术界。 SIGAda 教育工作组主席兼华盛顿特区乔治华盛顿大学计算机科学教授 Michael Feldman 编制了一份提供 Ada 作为“基础语言”的学校列表——即在工程和计算机科学专业学生的早期编程课程中。 他的名单列出了 117 所大学。4
毫不奇怪,由 成员组成的专注团体 SIGAda 仍然是 Ada 运动的重要组成部分。 他们将于 11 月 14 日至 18 日在亚特兰大 DoubleTree 酒店举行 SIGAda 2004 会议。 更多信息请访问:http://www.acm.org/sigs/sigada/conf/sigada2004/。
洛克希德·马丁航空航天公司软件工程总监 Pam Thompson 将在主题演讲中更深入地了解我们在此处讨论的主题,她的演讲题目是“Ada 能否应对 C/C++ 和 Java 的挑战?” 在她的摘要中,她指出洛克希德·马丁航空航天公司有几个使用 Ada 实施的大型软件系统,这些系统可能需要在未来 10 年内进行维护。 担忧包括编译器的生存能力、供应商对编写 Ada 应用程序的兴趣、老龄化的 Ada 编程社区以及省略 Ada 兼容性要求的软件开发环境升级。
她的摘要指出,“模型驱动架构和面向对象设计等新兴技术取代结构化应用程序,有可能显着改变 Ada 等编程语言在未来的作用。”
面对即将到来的软件迫切需求,或许 Ada 可能不仅仅在一个有用的领域与开发人员找到共鸣。
AdaCore
与波音公司即将推出的 7E7 梦想飞机一起使用。
http://www.adaic.org/news/act-7E7.html
AonixADT
Aonix 基于 Eclipse 开源工具包框架的 Ada 语言 IDE 的 Beta 版本。
http://www.aonix.com/pr_07.26.04.html
GNAT Pro 5.02a1
来自 AdaCore Technologies。 为 Ada、C 和 C++ 提供增强的多语言编程功能。
http://www.gnat.info/product_updates.php#GPS%202.0.0
Rhapsody in Ada
来自 I-Logix。 基于 UML(统一建模语言)的 Ada 程序员的视觉应用程序开发程序。
http://www.ilogix.com/newsroom/newsroom_detail.cfm?pressrelease=2002_02_19_055040_36053pr.cfm
1. Smith, J. What about Ada? The state of the technology in 2003. Technical Note-021 (July 2003), Carnegie Mellon University Software Engineering Institute; www.sei.cmu.edu/publications/documents/03.reports/03tn021.html.
2. Lanfear, C. The embedded software strategic market intelligence program 2001-2002: Ada in embedded systems. Venture Development Corp. (March 2002); http://www.vdc-corp.com/embedded/white/02/02embeddedada.pdf.
3. Taft, S. T. Fixing software before it breaks: Using static analysis to help solve the software quality quagmire. Ninth International Conference on Reliable Software Technologies Ada-Europe 2004; http://dmi.uib.es/~AE2004/AE2004speakers.html#tuc.
4. Feldman, M. Ada as a foundation programming language. SIGAda (Spring 2002); http://www.seas.gwu.edu/~mfeldman/ada-foundation.html.
[email protected] 或 www.acmqueue.com/forums
亚历山大·沃尔夫 毕业于纽约市库珀联盟学院,获得电气工程学位。 他是一位科学作家,居住在纽约州森林小山,曾为 IEEE Spectrum、EE Times、Embedded Systems Programming 和 Byte.com 撰稿。
© 2004 1542-7730/04/1000 $5.00
最初发表于 Queue 第 2 卷,第 7 期—
在 数字图书馆 中评论本文
Matt Godbolt - C++ 编译器中的优化
在向编译器提供更多信息方面需要权衡:这会使编译变慢。 链接时间优化等技术可以为您提供两全其美的优势。 编译器中的优化不断改进,即将到来的间接调用和虚函数分派的改进可能很快会带来更快的多态性。
Ulan Degenbaev, Michael Lippautz, Hannes Payer - 作为合资企业的垃圾回收
跨组件跟踪是解决跨组件边界的引用循环问题的一种方法。 只要组件可以形成具有跨 API 边界的非平凡所有权的任意对象图,就会出现此问题。 CCT 的增量版本在 V8 和 Blink 中实现,从而能够以安全的方式有效且高效地回收内存。
David Chisnall - C 并非低级语言
在最近的 Meltdown 和 Spectre 漏洞之后,值得花一些时间来研究根本原因。 这两个漏洞都涉及处理器推测性地执行超出某种访问检查的指令,并允许攻击者通过侧信道观察结果。 添加导致这些漏洞以及其他几个漏洞的功能是为了让 C 程序员继续相信他们在用低级语言编程,但这在几十年里已经不是这种情况了。
Tobias Lauinger, Abdelberi Chaabane, Christo Wilson - 你不应该依赖我
大多数网站都使用 JavaScript 库,其中许多库已知存在漏洞。 了解问题的范围以及包含库的许多意外方式只是改进情况的第一步。 这里的目标是,本文中包含的信息将有助于为社区提供更好的工具、开发实践和教育工作。