作者: Jack Ganssle
(02/04/09, 01:00:00 美国东部时间)
原文网址:http://www.embedded.com/212902632
一次又一次的民意调查显示,虽然过去了四分之一个世紀,Ada在嵌入式领域仍未赢得可观市场占有率。然而,数据明确显示,用Ada编写的程序比用C编写的程序缺陷更少,交付更快。
再有,Ada编译器是好用的(我将在本网站发布一篇文章,报告许多C语言工具不能正确编译使用"volatile"保留字的代码)。Ada编译器经过Ada合格评估测试套件(ACATS)的充分测试。
再有,最流行的Ada编译器─GNAT在GPL条件下是免费的。
Ada完全针对高可靠性嵌入式应用而设计。无论C或C++都不能如此宣称。Ravenscar Profile(以英国地名Ravenscar命名的一个标准——译者注)更精細地针对实时嵌入式系統制定了Ada任务机制的子集和使用限制(此句作了补充——译者注)。任务机制是內置功能,因而不再需要RTOS供应商提供的昂贵功能。
你可能会想,“更快、更好且免费的工具”是很吸引人的理由,但为什么不能说服大部份人?
这也许不能归咎于Ada的效率。AdaCore总裁Robert Dewar告诉我,与C语言相比,即使启用所有的运行时检查(runtime check),所花费的性能开销预期不超过20%,一般是10%左右。
也许我应该定义“运行时检查”,因为这个概念与C语言业界的概念不同。Ada搜查错误情况,如被0除等。你甚至可以定义整数的合法范围。但我们可以用C写如下语句:
num_doses=0;
morphine=patient_pain/num_doses;
dispense_morphine(morphine);
我們不能责备缺乏Ada编译器。AdaCore已经把GNAT移植到大部份主流的16和32位CPU。
根据我的经验,刚开始使用Ada的开发者往往讨厌这种语言。要使一个源文件通过编译很困难。俗话說:“如果你可以让这个倒楣的程序完全通过编译,那么它将能够运行。”在经历大约三个Ada项目后,大部份程序员会爱上这个语言。当然,他们要花费更多的精力来把代码搞正确(这显然是好事情),但他们也节省了大量的调试时间。
你如何看待Ada?请在本专栏下面留下你的意见,或转到Embedded.com Home Page 参加对这个问题的民意调查。
一位记者Rich Ries在写给我的信件中说:“Ada之所以不能成功,或许与健康的生活方式类似──有时我们都知道应该那样做,但却很少有人真正去做!”
(logiciel 译于2009年7月26日星期日)
译者附注1:这篇文章有22个跟贴,内容都比较详细,很有参考价值。
译者附注2:发了这篇译文后才发现网上已有同类译文,但比较后看到有些值得关注的差异,如本文把“tasking”译为“任务机制”而不是“任务分配”,把“legal ranges”译为“合法范围”而不是“非法范围”。