Ada如何成为"安全关键"语言?

26 ada

我尝试使用Google搜索并在线阅读一些代码段.为什么Ada是一种"安全关键"语言?我注意到的一些事情是

  • 没有指针
  • 指定范围(此类型是整数但只能是1-12)
  • 如果函数参数是out或in/out,则显式声明
  • 基于范围的循环(避免绑定错误或绑定检查)

其余的语法我要么不理解,要么没有看到它如何帮助它成为'安全关键'.这些是一些观点,但我看不出大局.它是否具有我没有看到的合同设计?它是否有规则使代码编译更难(如果有的话,那么它们是什么?)为什么它是一种"安全关键"语言?

T.E*_*.D. 15

嗯,这很简单.之所以有很多Ada sytax似乎与使语言"安全至关重要"(无论对语言意味着什么)有什么关系,这不是Ada的设计目标.它被设计成一个通用的编译系统的编程语言,足以使美国国防部能够摆脱它必须支持的所有小的一次性语言.

事实上,最终结果是一种对安全关键应用程序非常有用的语言,这只是一个令人愉快的副作用,因为该语言设计得非常精确,适用于军事应用程序(其中生命常常依赖于软件的可靠性)心里.

令人惊讶的是,很少有其他现代语言支持构建可靠的软件作为设计目标.大多数人似乎是由一个孤独的"天才"黑客制作出来的,其主要目标是能够快速推出大量代码,也许是以黑客喜欢的一些新方式.

  • @curiousguy - 注意过去时.我说的是70年代末到80年代初.实际上,C设计师被邀请将C放在当时考虑之中,并拒绝说出这一点. (9认同)
  • "_令人惊讶的是,很少有其他现代语言支持建立可靠的软件作为设计目标."现代"编译"语言没有这个目标吗? (5认同)
  • “最终结果是一种对安全关键型应用程序相当有用的语言,这只是一个令人高兴的副作用” - 我不得不否决这一点,可靠性是最初的语言设计目标之一:*“1B.可靠性.该语言应该有助于设计和开发可靠的程序。该语言的设计应避免容易出错的功能,并最大限度地自动检测编程错误。该语言应要求程序中有一些冗余但不重复的规范。“* (2认同)

Sha*_*rk8 14

所有这些都有利于安全关键应用; 但也要考虑分配布局(下至位)的能力以及[可选]指定此类记录只能位于某个位置的能力(对于视频内存映射等内容非常有用).

考虑到许多安全关键应用程序也没有标准(在"广泛传播"和前向可比性)接口中; 例如:核反应堆,火箭发动机(工程本身不同代相传*),飞机模型.

即将到来的Ada 2012标准DOES具有实际合同,以前后条件的形式; 示例(摘自http://www2.adacore.com/wp-content/uploads/2006/03/Ada2012_Rational_Introducion.pdf):

generic
   type Item is private;
package Stacks is

type Stack is private;

function Is_Empty(S: Stack) return Boolean;
function Is_Full(S: Stack) return Boolean;

procedure Push(S: in out Stack; X: in Item)
with
    Pre => not Is_Full(S),
    Post => not Is_Empty(S);

procedure Pop(S: in out Stack; X: out Item)
with
    Pre => not Is_Empty(S),
    Post => not Is_Full(S);

Stack_Error: exception;

private
 -- Private portion.
end Stacks;
Run Code Online (Sandbox Code Playgroud)

此外,另一件被掩盖的事情是能够Null从你的Access/指针类型中排除; 这很有用,因为你可以a)在你的子程序参数中指定排除,和b)简化你的算法[因为你不必在每个使用实例检查null],以及c)让你的例外处理程序处理(我假设)a的特殊情况Null.

* The Arianne 5 disaster occurred precisely because the management disregarded this fact and had the programmers use the incorrect specifications: that of the Arianne 4.

  • 还要考虑到Ada几乎不可能犯下许多错误,有些人错误地声称"真正的程序员"太聪明了. (4认同)
  • Re Arianne 5 - 该程序正确运行,对于arianne 4,当轨迹超出arianne 4的限制时,它正确地触发了自毁. (2认同)

Nic*_*k P 10

AdaCore在这里介绍了Ada 2005的各种安全功能:

http://www.adacore.com/knowledge/technical-papers/safe-secure/

很久以前,美国政府和工业界也开展了关于程序可靠性的研究,比较了语言.我很快找不到一个,因为这些网站都很旧(!)但这里引用了DDCI的网站:"在八十年代进行的研究中,Ada一直表现优于Pascal,Fortran和C等既定的编程语言.九十年代,Ada在性能评估方面继续超越C++,测量能力,效率,维护,风险和生命周期成本."

列出他们在下面的链接中使用Commanche项目的原因.我将补充说,平台实施已经存在了很长时间并保持稳定.就像文章中的消息来源所说,维护是大部分成本的来源.我们已经看到现代竞争者.NET和Java变得像疯了一样.Ada的长期稳定性对于安全性至关重要的应用程序更好,这些应用程序通常会长期(有时几十年)进行部署.

http://www.ddci.com/displayNews.php?fn=programs_rah66.php

另一个好处是Ada专为跨语言开发而设计.我一直在新闻中看到人们谈论.NET和JVM是如何创新的b/c他们让你把"正确的工具"混合到一个系统中.阿达有很长一段时间的这种能力.应用程序混合使用Ada,C,C++,汇编程序等是很常见的.(MULTOS CA浮现在脑海中.)它们仍能正常运行.

它也不是一成不变的.他们不断更新语言,最近一次是在2012年.它的可移植性允许它在JVM和.NET上运行,对于那些想要这些库的人来说,或者拥有大量现有代码.还有来自IBM,Aonix,AdaCore和Green Hills的许多操作系统和RTOS的Ada开发工具和强大的运行时.

最后的好处:如果它将编译,它将工作.通常.

  • 在该文章中,有一点非常简短:早期发现错误.即使错误一直存在,直到运行时,你很可能会得到一个异常,其中一条消息指向错误地接近错误,而不是在失败之后很长时间显示为其他东西的静默损坏......仅此一个IMO就是**巨大的**优势 (5认同)