Ada 是一种强类型语言,是开发高可靠性程序的自然选择。一些语言,如C,擅长低级编程,但不能解决其他挑战 - 正如我之前的博客所介绍的那样。您需要为工作选择合适的工具。与其对每个问题使用一种语言或一种工具,不如为工程师提供多种选择来开发高可靠性软件——这正是 Ada 的亮点。
我们可以通过高层次的视角来说明这一点,而无需深入研究特定的语言细节和个人偏好。第一步是研究强类型语言如何避免难以检测的错误和不正确的程序操作。
Ada在高可靠性应用中的优势
Ada 的许多高可靠性软件开发功能并非 Ada 所独有,可以在各种其他(强类型)编程语言中找到。Ada的独特之处在于所有这些功能都可以在一种编程语言中找到。
Ada 是强类型。简单来说,这意味着变量、常量或对象必须在使用之前声明。但是,它也允许语言(编译器)静态检查使用此类标识符的有效性。
此设计功能的一个有趣效果是,可以将拼写错误和拼写错误检测为错误并为开发人员标记。任何人类的写作努力都会有错误,随着总写作工作量的增加,错误的数量也会增加。由于许多拼写错误对于不经意的观察者来说看起来是正确的(或者它们一开始就不会发生),让语言检测到这些是非常有价值的。
假设程序员打算将车辆位置“L”计算为实数,并将整数索引“I”用于其他目的。在 Ada 中,如果使用变量“I”而不是“L”,则它将被标记为操作的错误类型。在 C 中,索引“I”将被隐式转换(“强制转换”)为表达式中的实值,从而引入错误。像这样的简单错误可能保持隐藏,难以发现,并且对软件的预期含义有潜移默化的变化。例如,“位置”应该是程序中此时的车辆位置,但索引“I”是不相关的。
Ada 支持将程序规范与实现分离的概念。该语言支持外部程序单元可见和调用的程序规范的定义。这定义了单元或子程序的名称及其参数、类型等。该规范对使用“with”构造的调用方可见。实现或正文可能位于单独的文件中,并包含规范的完整算法实现。此单元在语义上始终对调用方不可见。因此,调用方无法更改算法的内部详细信息。
这是Ada语言的一个关键特征,因为可以单独开发,测试和验证单元集合,而不必担心组合时会发生副作用。这允许以安全和可扩展的方式构建分层或组件架构。Ada 在这方面具有其他功能,但此基本概念对于开发高可靠性应用程序至关重要。具有“#Include”样式的其他语言功能在语义上将引用单元的源文本“包含”到引用/调用单元的源中。这使得所有内部详细信息对调用方可见,并允许发生意外或有目的的副作用。在小程序中,可以手动检测对这些内部细节的操纵。读者可以看到,调用方中的拼写错误可能会意外引用并更改被调用单元中的内部值(开发人员键入的“X”未在本地声明,但最终在所包含的单元中引用了“X”)。再一次,在较大的程序中,像这样的简单引用可能保持隐藏状态,难以发现,并且对软件的预期含义有隐蔽的变化。
通过结合这两个简单的功能,语言还可以检查两个标识符是否可以在表达式中一起使用。假设两个变量“A”和B“声明为:
• A 和 B 是整数类型• A 是整数,B 是颜色类型
加号(“+”)是一个子程序,具有定义数量的参数输入,具有特定类型,具有特定的返回值类型。是否有 1 “+” 1 (A+B) 的操作“+”?是否有 1“+” 蓝色 (A+B) 的操作“+”?在 C 语言的情况下,这两个表达式都可能是有效的,但它们是什么意思?在 Ada 的情况下,第一个表达式有效,但第二个表达式无效。同样,此类错误在开发生命周期的早期就被发现,在那里它们很容易被廉价地发现和纠正。
我只概述了 Ada 的一些非常基本功能的一些高级优势,因此可以在直观的层面上理解它们,为什么这些使程序更容易开发而没有错误。Ada 语言还有更多有助于开发高可靠性程序的功能,我鼓励您自己探索和测试它们。
审核编辑:郭婷
-
编程语言
+关注
关注
10文章
1936浏览量
34564 -
编译器
+关注
关注
1文章
1617浏览量
49021
发布评论请先 登录
相关推荐
评论