实际上有可能使用图灵不完整的“有用”编程语言吗?


37

如果人们接受某种语言必须是图灵完备才能有任何好处,那么实际上有可能使用一种不是图灵完备的“有用”编程语言吗?

我需要澄清的是,这是专门针对传统意义上的“编程”语言,而不是标记或查询语言。


3
@PhonicUK SQL不是图灵在第一个完整的
Ryathal

4
@Ryathal SQL不是编程语言,而是查询语言。
yannis 2012年

2
@PhonicUK您评论中的问题实际上是值得的,请将发布的问题更改为该问题,否则将因为不具有建设性而被关闭。实际上有有用的非图灵完整语言,我很想听听它们的详细信息。
吉米·霍法

5
regex尚未完善,但已被广泛使用
棘轮怪胎2012年

3
@DavidHammen实际的实现是有限的,是的,由于我们的物理世界的限制(只能建立有限的内存,只能在有限的时间内运行机器,然后才能出现故障)。但这并不意味着语言受到限制。IOW完整语言的规范不需要通过对程序施加这种限制来实现,而非TC语言则需要例如终止证明。

Answers:


48

CoqAgdaHOLACL2是非常有用且功能非常强大的语言,尽管它们不是图灵完备的。

使它们不具有图灵完备性的一个共同特征是,总是有可能证明终止。一个非常简单的限制就足够了:仅以可证明的结构较小的条件允许递归调用。因此,尽管不可能为图灵完备的语言甚至语言本身实现解释器,但仍有许多其他有用的东西,例如经过认证的C编译器


2
对于那些不熟悉这些语言的人,您是否可以详细介绍它们缺失的,使它们不完整的图灵完整的东西,以及一些使用这些语言构建的示例?
PhonicUK 2012年

8
@PhonicUK:C编译器不是C实现。它是一种将一种语言(C)的代码转换为另一种语言(通常是机器代码)的工具。但这并不意味着C编译器本身就等同于任何随机的C程序。
约阿希姆·绍尔

9
@PhonicUK,您无法用非图灵完备的语言实现图灵完备语言的解释器。但是,您当然可以实现编译器(因为图灵完整的CPU会进行实际评估)。
SK-logic

11
@ SK-logic:“当然吗?” 因为这是一种相当简单的语言,所以C只能使用。对于C ++,这是不可能的,因为编译器必须解释模板代码(在编译时是图灵完整的)。
MSalters 2012年

11
@MSalters是的,如果编译语言是完整的,则必须使用完整语言编写其编译器。这也是显而易见的(更不用说重言式了)。但是请注意,C ++标准允许对输入程序进行限制,例如模板实例化的最大评估深度(现有实现具有这种自由)。如果我没记错的话,这意味着有可能使用非图灵的完整C ++编译器(当然,除非无关的问题)。

12

我认为Yegge的“迷你语言”一词指的是这样的事实:对于一种特定的问题,使用一种语言通常会很有用,因为该语言不需要图灵完整性即可完成任务,而这正是非语言的核心。 -完善的语言可能很有用。https://sites.google.com/site/steveyegge2/language-grubbing

Wikipedia很好地回答了这个问题,这与我的直觉相吻合。首先,我想到的是纯数学,然后想起了regexp,维基百科列出了Epigram,我相信它将属于“纯数学”范畴。

http://en.wikipedia.org/wiki/Turing_completeness#Non-Turing-complete_languages

非图灵完备的语言

存在许多图灵不完整的计算语言。这样的例子就是一组由有限自动机生成的正则语言,最常见的是正则表达式。下推自动机和上下文无关文法的类别是有限自动机的更强大但仍不是图灵完备的扩展,它们通常在程序编译的初始阶段用于生成解析树。进一步的示例包括Direct3D和OpenGL扩展中嵌入的某些像素着色器语言的早期版本,或电子表格中无循环的一系列数学公式。[需要引用]在全部函数式编程语言中,所有函数都是合计的,并且必须终止,例如慈善和Epigram。慈善机构使用类型系统和基于类别理论的控制结构,

资料语言

图灵完整性的概念不适用于XML,JSON,YAML和S表达式之类的语言,因为它们通常用于表示结构化数据,而不是描述计算。这些有时称为标记语言,或更恰当地称为“数据描述语言”。

它还提到数据结构表示不是语言,但是我认为XSLT应该算作计算的表示,XPath可能不是基于Yannis上面所说的关于SQL是查询语言而不是计算语言的说法。也许T-SQL或PL / SQL可以算作计算语言,因为您可以使用它们的聚合来进行大量计算,而SQL的广义形式可能没有指定聚合。


8

我了解SQL在各种业务类型中都非常流行


3
SQL是一种查询语言,而不是编程语言。
PhonicUK

4
@PhonicUK:查询语言和编程语言之间到底有什么区别?
约阿希姆·绍尔

8
@PhonicUK-Tex是一种文本标记语言,它已经完成了图灵转换
Martin Beckett

3
据我所知,现代sql实现已完成。
shabunc 2012年

6
@shabunc IIRC仅适用于存储过程。争论确实有些循环,如果它不是图灵完成的,那么它不是一种编程语言-因此,所有“编程”语言都是TC
Martin Beckett 2012年

5

图灵完整性对于使一种语言适合用作通用语言是必要的。但这还不够,也就是说,仅因为它是图灵完整的,它并不适合每个问题领域:

  • 事实证明Whitespace是Turing完整的,但显然不适合程序员娱乐之外的任何问题领域。
  • C ++模板已被证明Turing完整,但实际上您永远不会用它们编写整个程序。

相反,即使没有图灵完整性,DSL也适用于它设计用于的问题域(假设它实际上是经过合理设计的):

  • HTML *提供了一种描述DOM树的简洁方法。虽然JavaScript是Turing完整的,可以用来做同样的事情,但它的噪音和模糊程度要大得多。
  • XPath和其他查询语言,不带嵌入式代码的PCRE等都是针对单个工作而设计的强大工具

* IIRC已证明,具有CSS动画的HTML通过使用它们在一系列复选框上实现Conway的“生命游戏”,已经完成了Turing。但是,即使在不支持CSS动画的浏览器中,HTML仍然有用。


2
您是否有指向CSS中实现的Conway's Life的链接?
RBerteig

我不知道CSS中有CGOL实现,但我知道规则110已实现。不过似乎找不到它,它似乎已被移动。
Christian Mann


-1非常有趣,但没有解决所提出的问题
mattnz

2
@mattnz:错了。我给出了有用的非图灵完备语言的具体示例,我认为这是对“实际上是否可能有一种不是图灵完备的'有用'编程语言?”的适当回应,与这里的另一个答案
back2dos 2012年

3

实际上确实存在编程语言,您只能在其中编写“高效”程序。在这种意义上高效意味着用这种语言编写的每个程序都用P。贝兰托尼(Bantantoni),尼格(Niggl)和史威登伯格(Schwichtenberg)在这里描述了这种语言


1

C预处理器不是图灵完整的(设计),但它仍然可以实现的解释应该是一个语言图灵完整的(订单的语言,如文档中所描述的,基本上是一个运行的-the-可以处理纯功能性的ML / Scheme类型的东西,并且如果不是用于非常规实现的话,则相对来说并不明显-可能很好用-)。

它背后的技巧类似于上面的关于在有限的物理世界中实现任何Turing机器的论点:C预处理器无法为语言提供无限数量的步骤或数据单元,但是它可以:

  1. 提供一个不合理的大动态数(默认2 ^ 64左右),足够大的用于解决使用指数扩展处理(最现实的问题喃喃喃喃宇宙的寿命喃喃)。

  2. 对上述数字使用任意的静态上限,即,虽然步数必须是某个有限数,但是可以通过更改解释器引擎的静态设置来更改“编译”时特定上限的大小。由于此上限的实际值没有(理论上)限制,因此可以(理论上)扩展它以适合任何终止程序的空间要求。

并不是说Order本身本身就一定是“有用的”,也不是说任何CPP实现的引擎都会有用,但这是一个有趣的概念证明。据说它也是动态输入的,这在该区域是不常见的。


在演讲过程中对喃喃自语表示支持。
jpaugh

-1

是的,确实有可能使用图灵不完整的有用语言。参见此处:http : //tkatchev.bitbucket.org/tab/examples.html

有用的图灵不完整语言的另一个示例是SQL。(还有另一种电子表格,例如Gnumeric或Excel,尽管它们并不是真正的编程语言。)

至于为什么您想要的图灵语言不完整:为什么这样可以使您对运行时行为做出一些有力保证。

坦白地说,图灵完整性意味着具有递归能力。具有递归意味着在内存中具有潜在的无界结构。由于在现实世界中内存不是无限的,因此图灵完整性需要内存管理和/或垃圾回收。

禁止递归是避免真正非常困难的资源管理问题的好方法。

诺娜·贝恩!图灵不完整并不一定意味着任何程序都必须终止。图灵不完整的语言可能允许评估无限的惰性列表。


-1

到目前为止,还没有提到一种有趣的“ sub-Turing编程语言”,因此我将其添加。

它称为“ Crema”。它描述为:

Crema是LLVM前端,旨在专门在Sub Turing Complete空间中执行。Crema的设计易于学习,并且可满足大多数所需的编程任务,因此可以将程序的计算复杂性限制在提高安全性所需的最低水平。

这是非常简约的,相当低的水平。

对于C开发人员来说应该看起来很熟悉。

它最初是由美国国防高级研究计划局(DARPA)资助的,但是在撰写本文时看起来并没有得到维护。但是也许有人仍然对此感兴趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.