当前位置: 首页 > 面试题库 >

有没有可证明的现实世界语言?(斯卡拉?)

燕禄
2023-03-14
问题内容

我在大学里被教过关于正规系统的知识,但是令我失望的是,它们似乎并没有被真正的单词使用。

我喜欢这样的想法:能够知道某些代码(对象,函数,任何东西)起作用,而不是通过测试,而是通过 证明

我确定我们都熟悉物理工程和软件工程之间不存在的相似之处(钢铁的行为可预测,软件可以做任何事情-
谁知道!),我很想知道是否有任何语言可以可以用真实的词来使用(是否要求太多Web框架?)

我听说过有关诸如scala之类的功能语言的可测试性的有趣事情。

作为软件 工程师 ,我们有哪些选择?


问题答案:

是的,有些语言旨在编写可证明正确的软件。有些甚至用于工业。Spark
Ada
可能是最突出的例子。我已经与Praxis
Critical Systems
Limited的一些人进行了交谈,他们将其用于在Boings上运行的代码(用于引擎监视),这看起来非常不错。(以下是该语言的精彩摘要/说明。)此语言及其随附的证明系统使用下面描述的第二种技术。它甚至不支持动态内存分配!

我的印象和经验是,有两种技术可以编写正确的软件:

  • 技术1:用您喜欢的语言(例如C,C ++或Java)编写软件。采取这种语言的正式规范,并证明您的程序正确。

如果您的目标是100%正确(这在汽车/航空航天业通常是必需的),那么您将花费很少的时间进行编程,而花费更多的时间进行证明。

  • 技术2:以一种稍显笨拙的语言(例如,Ada的某些子集或OCaml的调整版本)编写软件,并在编写过程中编写正确性证明。在这里编程和验证是齐头并进的。在Coq中编程甚至完全等同于它们!(请参阅库里-霍华德书信)

在这些情况下,您总是会得到正确的程序。(一定会保证错误会根植于规范中。)您可能会花更多的时间在编程上,但另一方面,您会在此过程中证明它是正确的。

请注意,这两种方法都取决于您手头有一个正式的规范(您将如何分辨正确/不正确的行为)以及该语言的形式化语义(您将如何分辨实际的行为)您的程序是)。

这是正式方法的更多示例。是否是“真实世界”,取决于您问的人:-)

  • Coq定理证明:用Coq编程(技术2)
  • ESC / Java(技术1,虽然声音不完整)
  • Spec#(技术1,虽然声音不完整)
  • Why / Krakatoa(技术2,基于Java)

我只知道一种“证明正确的” Web应用程序语言
:UR。确保“经过编译器”的Ur程序不会:

  • 遭受任何形式的代码注入攻击
  • 返回无效的HTML
  • 包含无效的应用程序内链接
  • HTML表单与其处理程序期望的字段之间不匹配
  • 包括客户端代码,这些代码对远程Web服务器提供的“ AJAX”样式的服务做出了错误的假设
  • 尝试无效的SQL查询
  • 与SQL数据库或浏览器与Web服务器之间的通信使用不正确的封送或封送处理


 类似资料:
  • 本文向大家介绍Objective-C语言你好,世界,包括了Objective-C语言你好,世界的使用技巧和注意事项,需要的朋友参考一下 示例 该程序将输出“ Hello World!”。 #import是预处理程序指令,它指示我们要将该文件中的信息导入或包括到程序中。在这种情况下,编译器将复制的内容,Foundation.h在Foundation框架文件的顶部。#import和#include之间

  • 我遇到以下异常: JAVAlang.IllegalArgumentException:没有实现以下指定的架构语言的SchemaFactory:http://www.w3.org/2001/XMLSchema-instance可以在javax上加载。xml。验证。SchemaFactory。MAIN上的newInstance(SchemaFactory.java:204)。SchemaImport3

  • 我正在尝试使用ScalaTest和ScalaCheck进行基于属性的测试。我的测试概述如下: 现在我看到的是,如果我一遍又一遍地运行PropSpec1中的测试,有时第二个测试会通过,但大多数时候会失败。现在,如果0没有被b测试,那么很明显它会通过,但我认为这是它会一直尝试的事情之一。重复运行sbt clean test时,我看到了相同的行为;有时两项测试都通过了。 这对于基于属性的测试是正常的吗,

  • 问题内容: 我不确定这是否存在,所以我想我会借鉴别人的智慧。 我想知道是否有任何Java库可用于验证SQL查询的语法。我知道与常见的SQL规范有许多差异,因此它可能仅适用于SQL:2006之类的东西,但这当然足够了。 我的目标是将其用于单元测试,而无需尝试对数据库执行。我知道它的用途有限,但仍然有用。 谢谢! 问题答案: 我认为没有这样的库。SQL语法派生太多。 可能的解决方案是使用开源纯Java

  • 环境准备工作 打开我们的centos 7虚拟机,确保nginx已经安装好并启动了服务(在前面的教程里有安装和启动方法)。下面我们来安装php-fpm(php和nginx之间的一个桥梁),执行: [root@centos7vm ~]# yum install php55w-fpm 执行 [root@centos7vm ~]# service php-fpm start 启动php-fpm服务 修