判断一种语言是否是编程语言的标准

14

什么是判断 XY 是否为编程语言所需的标准或基本特征?

我已经阅读了一些资料(HTML 是否被认为是一种编程语言?图灵完备性其他资料),并得出结论:一个语言或语法必须是 图灵完备的 才能被认为是一种编程语言。这个结论正确吗?这就足够了吗?

那么如何确定某个东西是否具有 图灵完备性?是否有任何具体标准?

拥有控制流结构(条件语句和循环)就足以被认为是 图灵完备的 吗?

4个回答

7
存在一些非图灵完备的编程语言。如果想了解一些非图灵完备语言的示例,请查看:实用的非图灵完备语言? 拥有非图灵完备的语言的一个优点可能是,它可能足以执行所需任务,同时又足够简单,使您能够证明程序的属性,否则您无法证明。例如,在必须知道程序将无错误运行的情况下,这可能很有用。
关于什么构成编程语言有点模糊,但可以说它是一种可以表达计算的语言。如果我们看看HTML,你不能创建任何计算文档;它只是告诉浏览器页面应该如何显示。重要的是要注意,它不会计算任何新东西。
正如Marcelo所说,这是相当模糊的。
至于确定一个语言是否图灵完备,我会参考这个问题:评估一种语言“图灵完备性”的实用指南是什么?

1
一个函数式程序不会计算任何东西;它只是告诉结果应该是什么。逻辑编程语言如Prolog也是如此。从语言理论的角度来看,编程语言的唯一要求是存在一个明确的语法,因此对于任何有效的序列都有单一的语法结构。所述结构的含义取决于解释器或翻译器;漂亮的打印机、度量分析器和编译器给同一个“程序”赋予不同的含义(例如,漂亮的打印机不关心类型和操作是否匹配)。 - Apalala
TCP协议是一种编程语言。 - Apalala

3
什么是判断X或Y是否为编程语言所需的标准或基本特征?
正如Marcelo Cantos所说,这有点模糊,特别是因为有一些领域特定语言(DSLs; http://en.wikipedia.org/wiki/Domain-specific_language)不是图灵完备的,但通常被认为是编程语言。
如何确定某个东西是否是图灵完备的?有没有具体的标准?
确定编程语言是否是图灵完备的一种方法是在其中编写一个图灵机(或Lambda演算的实现)。
另一种方法是证明所有mu-recursive函数http://en.wikipedia.org/wiki/%CE%9C-recursive_function都可以由该编程语言计算出来。
由于可以证明,如果有变量赋值、表示数字0的方法、后继函数、前驱函数和表示while循环的可能性,则命令式编程语言是图灵完备的。
有时候(由于明显的原因,这种方法并不总是奏效),用来证明一个编程语言不是图灵完备的一种方式是检查所有程序是否都终止;如果是,则它不能是图灵完备的。

1

0
“编程语言”这个词有些模糊不清。正则表达式构成一种编程语言吗?大多数程序员会说是的,即使正则表达式并不具备图灵完备性。
关于图灵完备性,我不是专家,但我认为只要有条件分支和无限栈(因此实际机器仅近似于图灵完备性)就足够了。
编辑:经过一番研究,我发现这是不够的。你需要至少两个堆栈和一些最小数量的状态(以及状态转换表)。
也许一个更为朴素的衡量标准是,如果可以记住任意数量的状态并进行循环,那么它很可能是图灵完备的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接