简而言之:
命令式编程语言的特点是接近图灵机和PC等普通计算机(它们更接近随机存取机(RAM)而不是图灵机)是显式存储器的概念,可以对其进行修改以存储(中间结果) )。它是计算的自动视图,具有状态概念(包括有限状态控制和内存内容),状态可以随着计算的进行而改变。
大多数其他模型都比较抽象。尽管它们可以将计算表示为原始结构的一系列转换步骤,但是这些转换被应用在某种数学意义上的临时性宇宙中。这可以保留诸如引用透明性之类的属性,这些属性可以简化数学分析。但是,它与依赖内存约束的自然物理模型之间的距离较远。
因此,除了如下所述的广义上的解释之外,没有自然的功能机器,因为软件与硬件并不是真正可分离的。
将Turing称为可计算性的尺度可能来自于以下事实:他的模型Turing机器最接近于此物理可实现性约束,这使其成为一个更直观的计算模型。
进一步考虑:
有许多计算模型,这些模型旨在以最通用的方式捕获计算概念。它们包括实际上具有许多不同口味的图灵机,lambda演算(也有口味),半Thue重写系统,部分递归函数,组合逻辑。
它们都捕获了数学家用来表达或进行计算的各种技术的某些方面。大多数已在某种程度上用作某些编程语言设计的基础(例如,用于重写系统的Snobol,用于组合器的APL,用于lambda演算的Lisp / Scheme),并且经常可以在现代编程语言中以多种方式组合。
一个主要的结果是,所有这些计算模型都被证明是等效的,这导致了Church-Turing的论点,即没有物理可实现的计算模型可以做的比这些模型中的任何一个都多。如果可以证明计算模型等效于这些模型之一,则称该模型为图灵完备的。
名称可能不同。选择图灵机(TM)作为参考可能是由于它可能是这些模型中最简单的一个,它紧密(虽然简单地)模仿了人类的计算方式,并且相当容易实现(以有限的有限形式) )作为一种物理设备,以至于图灵机是用乐高玩具组制造的。基本思想不需要复杂的数学方法。赋予此参考位置的可能是该模型的简单性和可实现性。
在艾伦·图灵(Alan Turing)创建其计算设备时,桌上还有其他提议可以作为可计算性的正式定义,这是数学基础的关键问题(请参阅
Entscheidungsproblem)。当时的专家认为Turing提案是最令人信服的涵盖了有关应计算性的已知工作(请参阅Computability and Recursion,RI Soare,1996,请参阅第3.2节)。各种建议被证明是等效的,但图灵的建议更具说服力。[摘自Yuval Filmus的评论]
应该注意的是,从硬件的角度来看,我们的计算机不是图灵机,而是所谓的随机存取机(RAM),它也是图灵完整的。
纯粹的命令性语言(可能意味着什么)可能是用于最基本模型(例如Turing机器)或计算机的汇编语言(跳过其二进制编码)的形式主义。众所周知,这两者都不可读,并且很难编写重要的程序。实际上,与直接使用机器指令相比,即使汇编语言也具有一些更高级别的功能以使编程变得更轻松。基本的命令式模型对物理世界是封闭的,但不是很有用。
这迅速导致了更高级别的计算模型的开发,并开始将各种计算技术(例如子程序和函数调用,内存位置命名,名称范围,名称和量化以及虚拟变量)混合使用,已经以某种形式使用数学和逻辑,甚至是非常抽象的概念,例如反射(Lisp 1958)。
将编程语言分为诸如命令式,功能性,逻辑,面向对象的编程范式的分类是基于这些技术中某些在语言设计中的优势,以及某些强制执行程序某些属性的计算功能的存在与否或用该语言编写的程序片段。
某些型号对于物理机很方便。其他一些对于算法的高级描述更为方便,这可能取决于要描述的算法的类型。一些理论家甚至使用算法的不确定性规范,甚至可以将其翻译成更常规的编程术语。但是没有不匹配的问题,因为我们开发了一种复杂的编译器/解释器技术,可以根据需要将每个模型转换为另一个模型(这也是Church-Turing论文的基础)。
现在,您永远不应将计算机视为原始硬件。它确实包含布尔电路,该布尔电路执行非常基本的处理。但是,其中大部分是由您永远不会了解的计算机内部的微程序驱动的。然后,您将拥有一个使您的计算机看上去与硬件看起来甚至有所不同的操作系统。最重要的是,您可能拥有一个虚拟机,该虚拟机执行字节码,然后是一种高级语言,例如Pyva和Jathon或Haskell或OCaml,可以将其编译为字节码。
在每个级别,您都会看到不同的计算模型。很难将硬件级别与软件级别分开,从而为计算机分配特定的计算模型。而且由于它们都是可互译的,因此最终的硬件计算模型的想法几乎是一种幻想。
lambda演算机器确实存在:它是一台可以减少lambda演算表达式的计算机。轻松完成广告。
关于专用机器架构
实际上,作为对Peter Taylor的回答的补充,并在硬件/软件交织方面进行了跟进,生产了专用机器,以更好地适应特定的范式,并使用基于该范式的编程语言编写其基本软件。
这些包括
从根本上讲,这些也是必不可少的硬件结构,但是通过特殊的硬件功能或微程序解释器可以减轻这些负担,以更好地适应预期的范例。
实际上,从长远来看,专门用于特定范例的硬件似乎从未成功过。原因是在香草硬件上实现任何范式的编译技术变得越来越有效,因此不需要专门的硬件。此外,硬件性能正在快速提高,但改进的成本(包括基本软件的演进)在专用硬件上比在专用硬件上更容易摊销。从长远来看,专用硬件无法竞争。
尽管如此,尽管我没有确切的数据,但我怀疑这些冒险活动会留下一些确实影响机器,存储器和指令集体系结构发展的想法。
(a -> a) -> a
。