高完整性系统的编程语言选择

时间:2010-05-03 11:58:27

标签: programming-languages high-integrity-systems

哪些编程语言是高完整性系统的理想选择?

糟糕选择的一个例子是Java,因为程序员无法访问相当数量的代码。我正在寻找强类型块结构语言的例子,其中程序员负责100%的代码,并且尽可能少地受到JVM之类的干扰。

编译器显然是个问题。语言必须有完整而明确的定义。

编辑: 高完整性系统是安全关键系统等,安全系统等的总称。

编辑编辑: 我想要不受平台影响的语言示例,无论编译器如何,都会产生相同的结果,并且是完全定义的。

7 个答案:

答案 0 :(得分:4)

我认为ADA常用于此。

答案 1 :(得分:4)

Ada的SPARK子集将是一个非常好的起点。 SPARK继承了Ada的所有优点(强类型,易于阅读,......),并且没有未定义的功能,这意味着无论使用哪种Ada编译器,所有SPARK程序都会做同样的事情。编译它。

SPARK可以在没有运行时使用。类似于Ada语言(参见编译指示No_Runtime)。

当然,对于SPARK等语言,您可以灵活地进行安全(或安全)交易。

答案 2 :(得分:4)

您正在寻找多高的整合度?

    俄勒冈州波特兰市的
  • GaloisHaskell编写的高完整性系统上建立了非常成功的业务。我相信他们强调数据的完整性和安全性。在这种复杂的语言中使用非常复杂的运行时系统进行此类工作有点令人惊讶,但Haskell的类型系统提供了非常强大的保证,并且语言语义提供了比大多数语言更强大的推理原则。此外,您倾向于为每个应用程序编写更少的代码,因此很容易显示正确。

  • 如果您需要更强大的保证,SPARK Ada(或者这些天只是SPARK)是一种相对简单的传统命令式语言,它带有完整的形式语义和完整形式验证工具。你获得比Haskell更强的保证,但是在资本和劳动力方面的价格都要高得多。

答案 3 :(得分:3)

您可能想要考虑Eiffel,其中前后条件的强制执行使高完整性系统更容易。

答案 4 :(得分:1)

这是一个矛盾。强类型的块结构语言几乎总是由编译器编译,产生程序员不负责的机器代码。如果您想对代码负全部责任,则需要使用汇编语言。

答案 5 :(得分:1)

我不完全明白它是什么“高完整性系统”。假设你的意思是“一个不容忽视错误的系统”,我建议你看看ML,它是OOP衍生物,O'CaML。 ML旨在最大限度地减少类型错误。 ML中没有转换错误或空指针 - 您根本无法对它们进行编码。它也缺乏动态功能 - 这使它不那么酷但更安全。

话虽如此,ML远非黑客的喜悦;这是一种有点麻烦的语言。但是如果你更喜欢工作一个小时并减少一个例外,这是一个相关的选择。

答案 6 :(得分:-2)

你可能会寻找你想要的东西,但你不会得到它。

您的要求彼此不兼容。他们基本上完全排除了任何类型的库。你可以说你可以使用C / C ++ - 但没有任何包含文件和标准库(程序员显然不负责)。

这使你几乎处于旱地 - 这种要求是不切实际的。即使有一个庞大的团队,人们也不想重新编程大多数图书馆。

如果你有适当的编程方法,Java实际上是非常好的 - 而且你的需求(高完整性系统)更有趣的是编程方法的问题(单元测试,大量内部测试,并行比较多个实例)结果 - 就像航天飞机控制计算机 - 万一发生故障)而不是语言决定的东西。