Computer science 评估一门语言的实用指南是什么;s";图灵完整性;?

Computer science 评估一门语言的实用指南是什么;s";图灵完整性;?,computer-science,language-design,turing-complete,Computer Science,Language Design,Turing Complete,我已经读过和维基百科的页面,但我对一个正式的证明不感兴趣,而对图灵完全的实际含义更感兴趣 我实际上想确定的是,我刚刚设计的玩具语言是否可以用作通用语言。我知道如果我能用它写一个图灵机,我就能证明这是真的。但我不想进行这种练习,直到我相当肯定会成功 是否有一组最小的特征,没有这些特征,图灵完整性是不可能的? 是否有一套功能实际上可以保证完整性 (我的猜测是,条件分支和可读/写内存存储将使我在大部分方面都能做到这一点) 编辑: 我想我说“图灵完成”是偏离正轨了。我试图以合理的信心猜测,一种新发明的

我已经读过和维基百科的页面,但我对一个正式的证明不感兴趣,而对图灵完全的实际含义更感兴趣

我实际上想确定的是,我刚刚设计的玩具语言是否可以用作通用语言。我知道如果我能用它写一个图灵机,我就能证明这是真的。但我不想进行这种练习,直到我相当肯定会成功

是否有一组最小的特征,没有这些特征,图灵完整性是不可能的? 是否有一套功能实际上可以保证完整性

(我的猜测是,条件分支和可读/写内存存储将使我在大部分方面都能做到这一点)


编辑:

我想我说“图灵完成”是偏离正轨了。我试图以合理的信心猜测,一种新发明的具有特定功能集的语言(或者,具有特定指令集的虚拟机)能够计算任何值得计算的东西。我知道证明你可以用它来建造一台图灵机是一种方法,但不是唯一的方法

我所希望的是一套指导原则,比如:“如果它能做X、Y和Z,它可能什么都能做。”

我不确定是否有“最小特征集”,但要证明一种语言是图灵完备的,你只需要证明它能模拟另一个图灵完备系统(不一定是图灵机器),只要已知另一个系统是图灵完备的。有一个完整的图灵完整系统列表。其中一些比图灵机简单

…而不是图灵完全的实际含义

我怀疑图灵完备是否有任何实际意义

如果你看一些图灵完整机器的例子,例如原始机器,你会发现这些机器对实际计算远没有用处,因此这个概念必须只具有理论意义。

描述了能够表达任何任意性质的特性,而这正是它的初衷。如果语言或逻辑系统具有此属性,则可以将其描述为“图灵完备”。从实用的角度来看,所有通用编程语言——以及数量惊人的大量专用编程语言——都可以在适当宽松的定义下实现这一点(见下文)

然而,图灵完整性的严格定义意味着无限的存储容量,这在物理上当然是不可能的。有鉴于此,任何物理机器都不可能是图灵完全的,但当将图灵完全性归因于编程语言时,通常会放松(至少非正式地)这个约束。对于一种语言来说,图灵机完整性的一个简单测试是该语言是否可以用于实现图灵机模拟器

非图灵完备的广泛系统的一个例子是关系代数,Codd论文《关系代数》中描述的SQL背后的理论基础具有的属性,这意味着它可以表示任何可以定义为的计算(即普通逻辑表达式)。然而,它不是图灵完备的,因为它不能表示任意的算法计算

请注意,大多数(如果不是所有的话)实用SQL方言都使用过程结构扩展了纯关系模型,使其按照通常应用于编程语言的定义图灵完成。但是,单个SQL查询大体上不是


图灵完备领域特定语言的一些更令人震惊的例子是和。在后一种情况下,实际上有一个著名的ish示例,有人使用sendmail.cf来您需要某种形式的动态分配构造(
malloc
new
cons
就可以了)以及递归函数或其他编写无限循环的方式。如果你有这些并且可以做任何有趣的事情,你几乎可以肯定是图灵完全的

lambda演算在功能上等同于图灵机器,如果实现lambda演算,编写lambda演算程序实际上非常有趣。比为图灵机器编写程序有趣多了


我所知道的图灵完整性的唯一实际含义是,您可以编写不终止的程序。我使用了两种特殊用途的语言来保证终止,因此它们不是图灵完全的。有时,放弃额外的表达能力以换取有保证的终止是很有用的。

如果你能实现一个图灵机(只要它们能实现,因为它们是具有无限内存的数学结构[磁带大小为infinte]),那么你就可以确定它是图灵完成的

一些迹象:

  • 您可以检查内存并基于当前值对其进行操作,还可以使用它来控制程序流
  • 那个内存可以是分配内存,可以附加到的字符串,可以通过递归等方式分配内存的堆栈
  • 程序流可以通过迭代,也可以通过基于选择的递归

我不记得看到过图灵完整性的最小功能。但是,如果您的语言支持循环和条件分支,那么它是图灵完全的可能性是很大的。然而,证明它的唯一方法仍然是模仿一台图灵机或另一种图灵全语言

我想对Norman Ramsey所说的补充一点:图灵机有无限的内存,因此被认为是图灵机完备的编程语言只有在内存也是无限的假设下才会如此。

非图灵机完备的语言示例经常有有有界循环,如:

但缺少检查更一般条件的无界循环,如:

while bool_expr {...}
while bool_expr{…}
while bool_expr {...}