术语 | 图灵完备语言(Turing-Complete Language)

简介: 如果一个计算机语言具有图灵完备性(Turing Completeness),那么这个语言就是图灵完备语言(Turing-Complete Language)。

图灵完备语言

概述

如果一个计算机语言具有图灵完备性(Turing Completeness),那么这个语言就是图灵完备语言(Turing-Complete Language)。

背景

艾伦·图灵

艾伦·麦席森·图灵

艾伦·麦席森·图灵(Alan Mathison Turing,1912.6.23 - 1954.6.7),1 英国数学家、逻辑学家、密码学家和英国首位计算机科学家,被誉为计算机科学和人工智能之父。2

他对计算机科学的发展有着很高的影响力,他用图灵机提供了算法和计算概念的形式化,图灵机可以被视为通用计算机的模型。3 他的图灵测试对人工智能的发展,作出了重要的、典型的、具挑战性的和持久的贡献。4

图灵机

在 1928 年第八届国际数学家大会上,德国数学家希尔伯特(David Hilbert,1862 - 1943)提出了关于数学的三个精辟问题:

First, was mathematics complete …(数学是完备的吗?)
Second, was mathematics consistent …(数学是一致的吗?)
And thirdly, was mathematics decidable ?(数学是可判定的吗?)

图灵机模型

希尔伯特的第三个问题又被称为判定性问题(Entscheidungsproblem)。为了证否这个命题,1936 年,图灵发表了一篇论文,题为《论可计算数,及其在判定性问题上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem)。在这篇论文里,图灵提出了一种假设的计算装置,他称之为 A-Machine(Automatic Machine,自动机器),这就是图灵机(Turing Machine)。

可计算函数

1938 年,在美国普林斯顿大学攻读博士学位的图灵,发表了一篇博士论文,题为《基于序数的逻辑系统》(Systems of Logic Based on Ordinals)。在这篇论文里,图灵定义了可计算函数(Computable Function):

A function is effectively calculable if its values can be found by some purely mechanical process.
如果一个函数的值可以通过某种纯机械的过程找到,那么这个函数就可以有效地计算出来。

在作为特定计算模型的图灵机上产生的可计算函数,就被称为图灵可计算函数

图灵完备性

如果一个计算系统可以计算每一个图灵可计算函数,那么这个系统就是图灵完备的;或者说,这个系统可以模拟通用图灵机

图灵完备性也可以用来描述计算机语言的计算能力。

定义

具有图灵完备性的计算机语言,就被称为图灵完备语言。绝大多数的编程语言,都是图灵完备语言。这包括:

  • 广泛使用的所有通用语言:

    • 过程式语言,如 FORTRAN、Pascal 等。
    • 面向对象语言,如 Java、Python 等。
    • 多范式语言,如 Ada、C++ 等。
  • 使用不太常见范式的大多数语言:

    • 函数式语言,如 Haskell、Mercury 等。
    • 逻辑式语言,如 Logtalk、Prolog 等。
    • 声明式语言,如 SQL、XSLT 等。
    • 深奥的语言(Esoteric Programming Language),一种奇特的数学娱乐形式,程序员用极其困难但数学上图灵等价的语言来实现基本的编程结构。

非图灵完备语言

并非所有的计算机语言都是图灵完备的,例如标记语言,或者更恰当地称为“容器语言”或“数据描述语言”,就不是图灵完备的。

非图灵完备语言(Non-Turing-Complete Language),包括 HTML、JSON、XML、YAML 等。

目录
相关文章
|
1月前
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
46 0
|
3月前
|
程序员 Swift
在Swift编程语言中,Control Transfer Statements
在Swift编程语言中,Control Transfer Statements
32 2
|
6月前
|
SQL 开发框架 自然语言处理
什么是编程领域的 DSL - Domain Specific Language
什么是编程领域的 DSL - Domain Specific Language
60 0
|
7月前
|
存储 开发框架 自然语言处理
关于 ABAP 开发对象的原始语言版本(Original Language)
关于 ABAP 开发对象的原始语言版本(Original Language)
33 0
关于 ABAP 开发对象的原始语言版本(Original Language)
|
7月前
ABAP 编程语言里的 Reference Semantic - 引用语义
ABAP 编程语言里的 Reference Semantic - 引用语义
41 0
SAP UI5 current language语言的决定逻辑和优先级
Created by Wang, Jerry, last modified on Oct 19, 2015
77 0
SAP UI5 current language语言的决定逻辑和优先级
|
XML 数据格式
SAP ABAP实用技巧介绍系列之Debug XSLT transformation
SAP ABAP实用技巧介绍系列之Debug XSLT transformation
207 0
SAP ABAP实用技巧介绍系列之Debug XSLT transformation
|
XML JSON 数据格式
编码与模式------《Designing Data-Intensive Applications》读书笔记5
进入到第四章了,本篇主要聊的点是编码(也就是序列化)与代码升级的一些场景,来梳理存储之中涉及到的编解码的流程。目前主流的编解码便是来自Apache的Avro,来自Facebook的Thrift与Google的Protocolbuf,在本篇之中,我们也会一一梳理各种编码的优点与痛点。
1281 0
|
Java
Q#语言入门1 操作operation
Q# 程序会包含一个或多个操作(operation)。操作描述了量子操作带来的影响。 还可以包含一个或多个方法(function)。方法用来操作经典数据,只用来计算。   每个操作还可以调用其他操作(这不就是java里的方法吗?说对了一半,是java里的静态方法)。
1153 0