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

Programming languages 高完整性系统的编程语言选择,programming-languages,high-integrity-systems,Programming Languages,High Integrity Systems,什么编程语言是高完整性系统的好选择 一个错误选择的例子是Java,因为存在大量程序员无法访问的代码。我正在寻找强类型、块结构语言的示例,其中程序员负责100%的代码,并且尽可能少地受到JVM之类的干扰 编译器显然是个问题。语言必须有一个完整而明确的定义 编辑: 高完整性系统是安全关键系统等、安全系统等的总称 编辑: 我想要不受平台影响的语言示例,无论编译器如何,这些语言都会产生相同的结果,并且这些语言都是完全定义的。我认为ADA常用于此。这在术语上是矛盾的。强类型、块结构语言几乎总是由编译器编译

什么编程语言是高完整性系统的好选择

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

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

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

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

我认为ADA常用于此。

这在术语上是矛盾的。强类型、块结构语言几乎总是由编译器编译,生成程序员不负责的机器代码。如果你想对代码负100%的责任,你需要使用汇编语言。

你可以寻找你想要的,但你不会得到它

您的要求彼此不兼容。他们基本上完全排除了任何类型的图书馆。你可以说你可以使用C/C++,但是没有任何包含文件和标准库(程序员显然不会负责)。 这让你几乎处于干旱地带——这个要求是不现实的。即使有一个庞大的团队,也不希望对大多数库进行重新编程


事实上,如果你有合适的编程方法,Java是相当不错的——而且有趣的是,你的需求(高完整性系统)更多的是编程方法的问题(单元测试、大量内部测试、多个并行实例比较结果——如航天飞机控制计算机——以防出现故障)而不是语言决定的结果。

Ada的SPARK子集将是一个非常好的起点。SPARK继承了Ada的所有优秀特性(强类型、易于阅读,…)还有一个好处是没有未定义的特性,这意味着所有SPARK程序都将做完全相同的事情,不管使用哪种Ada编译器编译它

SPARK可以在没有运行时的情况下使用。Ada语言也是如此(参见pragma no_运行时)


当然,对于SPARK这样的语言,您是在用灵活性换取安全性。

您可能会想,在哪些方面,更强有力的前置和后置条件的强制执行使高完整性系统更容易实现。

我不完全理解什么是“高完整性系统”。假设您是指“一个为bug留下更少空间的系统”,我建议你看看,它是OOP的衍生产品,.ML的设计目的是最大限度地减少类型错误。ML中没有强制转换错误或空指针-你根本无法对它们进行编码。它还缺少动态特性-这使得它不那么酷,但更安全


话虽如此,ML远不是黑客们喜欢的语言;它是一种有点麻烦的语言。但如果你喜欢多工作一个小时,少得到一个异常,这是一个相关的选择。

你想要多高的集成度

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

  • 如果你需要更强大的保证,(或者说现在只是SPARK),这是一种相对简单的传统命令式语言,带有完整的形式语义和用于完整形式验证的工具。你可以得到比Haskell更强大的保证,但在资本和劳动力方面都要付出更高的代价


包括操作系统和编译器?请参见编辑。编译器是一个问题,但编译器的可靠性是可以验证的。真的吗?请参见暂停问题@Chris:这并不是一个你想象中的问题:你只是让验证在任何充分自参考的问题上失败。编译器显然是一个问题。我更关心的是finding展示所列某些特性的语言示例。Andreas给出了ADA示例,其中编译器经过可靠性验证。寻找更多此类示例。@Finbar那么您的问题应该是“哪些语言正式验证了编译器实现?”?或者类似的。您也可以指出“高度诚信”的含义。我试图进一步说明我所说的高完整性。这很好。维基百科同意-我只是在寻找尽可能少歧义的语言,我不认为Java是一个好例子。非常好。这就是我在寻找的答案。是的,我以前遇到过这一点。谢谢!