判断X或Y 是(或不是)编程语言所需的标准或基本特征是什么?
我做了一些阅读(HTML被认为是一种编程语言吗?、图灵完备等),并得出结论,一种语言或语法必须是图灵完备的才能被视为一种编程语言。这个对吗?够了吗?
以及如何确定某些东西是否是图灵完备的?有什么具体的标准吗?
控制流结构(条件语句和循环)是否足以被视为图灵完备?
判断X或Y 是(或不是)编程语言所需的标准或基本特征是什么?
我做了一些阅读(HTML被认为是一种编程语言吗?、图灵完备等),并得出结论,一种语言或语法必须是图灵完备的才能被视为一种编程语言。这个对吗?够了吗?
以及如何确定某些东西是否是图灵完备的?有什么具体的标准吗?
控制流结构(条件语句和循环)是否足以被视为图灵完备?
存在不是图灵完备的编程语言。有关非图灵完备语言的一些示例,请查看:实用的非图灵完备语言?
例如,使用非图灵完备语言的一个优势可能是它可能足以执行您需要的任务,同时又足够简单,可以让您证明程序的属性,而这些属性是您无法证明的。例如,这在知道程序将无错误运行至关重要的情况下可能很有用。
究竟是什么构成了编程语言有点模糊,但可以说它是一种可以表达计算的语言。如果我们看一下 HTML,你不能创建一个计算任何东西的文档。它只是告诉浏览器页面的外观。需要注意的重要部分是,它不会计算任何新内容。
正如马塞洛所说,它非常模糊。
至于确定一种语言是否图灵完备,我将向您推荐这个问题:评估语言的“图灵完备”的实用指南是什么?
判断 X 或 Y 是(或不是)编程语言所需的标准或基本特征是什么?
正如马塞洛·坎托斯(Marcelo Cantos)已经说过的那样,它有些模糊,特别是因为有领域特定语言(DSL;http ://en.wikipedia.org/wiki/Domain-specific_language )不是图灵完备的,但也经常被认为是编程语言。
以及如何确定某些东西是否是图灵完备的?有什么具体的标准吗?
确定编程语言是否图灵完备的一种方法是在其中编写图灵机(或 Lambda 演算的实现)。
另一种方法是证明所有 mu-recursive 函数 http://en.wikipedia.org/wiki/%CE%9C-recursive_function 都可以通过编程语言计算。
由于可以证明命令式编程语言是图灵完备的,如果存在变量赋值、表示数字 0 的方式、后继函数、前驱函数以及表示 while 循环的可能性,这是另一种方式。
一种有时使用的方法(由于显而易见的原因并不总是有效)证明一种编程语言不是图灵完备的,是检查所有程序是否都终止;如果是,那不可能。
因此,让我们考虑一下这些具体定义的后果:
图灵完备的语言是一种编程语言:CSS 变成了一种编程语言。
编程语言必须是图灵完备的:也许可以,但可以用其他方式编写程序。
现在有一个更好的定义:编程语言是一种可以用来编写程序的语言。
“编程语言”这个术语有些模糊。正则表达式是否构成编程语言?大多数程序员会说是的,即使正则表达式不完整。
至于图灵完备性,我不是专家,但我认为有条件分支和无限堆栈就足够了(因此真机仅近似图灵完备性)。
编辑:经过一番研究,我发现这还不够。您至少需要两个堆栈和一些最少数量的状态(和一个状态转换表)。
也许更实际的衡量标准是,如果可以记住任意数量的状态和执行循环,那么它可能是图灵完备的。