26 ada
我尝试使用Google搜索并在线阅读一些代码段.为什么Ada是一种"安全关键"语言?我注意到的一些事情是
其余的语法我要么不理解,要么没有看到它如何帮助它成为'安全关键'.这些是一些观点,但我看不出大局.它是否具有我没有看到的合同设计?它是否有规则使代码编译更难(如果有的话,那么它们是什么?)为什么它是一种"安全关键"语言?
T.E*_*.D. 15
嗯,这很简单.之所以有很多Ada sytax似乎与使语言"安全至关重要"(无论对语言意味着什么)有什么关系,这不是Ada的设计目标.它被设计成一个通用的编译系统的编程语言,足以使美国国防部能够摆脱它必须支持的所有小的一次性语言.
事实上,最终结果是一种对安全关键应用程序非常有用的语言,这只是一个令人愉快的副作用,因为该语言设计得非常精确,适用于军事应用程序(其中生命常常依赖于软件的可靠性)心里.
令人惊讶的是,很少有其他现代语言支持构建可靠的软件作为设计目标.大多数人似乎是由一个孤独的"天才"黑客制作出来的,其主要目标是能够快速推出大量代码,也许是以黑客喜欢的一些新方式.
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.
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开发工具和强大的运行时.
最后的好处:如果它将编译,它将工作.通常.