Lambda 冯·诺依曼机器和兰博达斯

Lambda 冯·诺依曼机器和兰博达斯,lambda,von-neumann,Lambda,Von Neumann,布赖恩对这个问题的论证中的前提很有趣: 计算机是冯·诺依曼(vonneumann)的机器,其设计目的是为了更好地处理效果(而不是为了更好地处理lambdas) 这些方法的并置让我感到困惑。我看不出他们是黑白相间的。以下各项的证明值是多少: 计算机是冯·诺依曼(vonneumann)设计的机器,可以很好地处理效果[1] 最后一部分让我感到困惑: 而不是设计为与lambdas配合良好[2] lambda是否用作函数式编程的符号?或者它们是函数式编程的委婉说法?真正的信息是什么 在什么意义上,前提[1

布赖恩对这个问题的论证中的前提很有趣:

计算机是冯·诺依曼(vonneumann)的机器,其设计目的是为了更好地处理效果(而不是为了更好地处理lambdas)

这些方法的并置让我感到困惑。我看不出他们是黑白相间的。以下各项的证明值是多少:

计算机是冯·诺依曼(vonneumann)设计的机器,可以很好地处理效果[1]

最后一部分让我感到困惑:

而不是设计为与lambdas配合良好[2]

lambda是否用作函数式编程的符号?或者它们是函数式编程的委婉说法?真正的信息是什么


在什么意义上,前提[1]和[2]的部分是正确的?答复中隐藏的前提是什么?有人能证明原来的前提是正确的吗?冯·诺依曼机器和兰姆达斯到底是如何工作的?

我不完全确定你在问什么,但当我读到它时,你在问他所说的兰姆达斯是什么意思

他指的是构成函数式编程理论基础的。它是(除其他外)描述和推理高阶函数的抽象符号

冯·诺依曼机器基本上就是我们所拥有的。程序由操作和访问存储(我们的RAM)的指令执行。也就是说,所有的事情都是通过副作用隐式完成的。数据从RAM中的某个区域读取,经过一点处理,然后写回RAM中的某个(可能是其他)区域。 如果没有副作用,CPU在通电时只能处理寄存器中的垃圾数据

Lambda演算没有副作用的概念,因此基于这一原理的机器不会区分“CPU可以访问的内容”(本质上是我们的寄存器)和“可以间接访问的内容”(我们的RAM)。这种机器中的一切都基于函数原理,函数接受一个或多个参数,并返回一个新值,从不修改现有值。(不,我不确定这在硬件中是如何工作的…:)


这回答了你的问题吗

下面是我更深入的意思,不过看看其他人是否同意或者他们有什么要说会很有趣

想想今天计算机是如何工作的。您的硬件具有整数和浮点寄存器,以及大量随机访问内存,指令的形式主要是“基于读取此寄存器/存储单元的值,将此新值插入此寄存器/存储单元”。(当涉及到缓存线、一致性和内存模型等等时,更新内存单元会产生各种性能影响。)整数是32位或64位,几乎所有编程语言都会显示这些与硬件完全匹配的数据类型。几乎每个运行时都使用一个小的调用堆栈,其中堆栈分配的对象很便宜,而使用一个更昂贵的“堆”,当需要非基于堆栈的生命周期时,可以在其中创建和销毁其他对象

现在考虑大多数现代函数式编程语言。不变性是常态;你很少会用新的价值观来“戳”记忆。(这意味着您创建了更多的新对象,这意味着您分配了更多。)lambda和continuations是标准;您很少有与堆栈相对应的对象生存期。(事实上,某些FP运行时不使用堆栈;在CPS实现中,堆栈和程序计数器的概念不合适。)递归是一种循环构造,因此至少需要“tail”调用才能不使用堆栈。实际上,所有东西都需要“堆”分配,当然,您需要一个垃圾收集器。代数数据类型提供标记数据;理论上,这些标记只需要额外的2或3位数据,但为了匹配运行时,它们通常需要额外的一个字或更多的内存。。。我有点胡思乱想,但在FP语言中,您最常做的事情往往与典型的计算机硬件架构和基本语言运行时中扩展最差或最昂贵的事情完全对应

不一定要这样。你可以想象这样一个世界:运行时避开堆栈,加快堆/分配速度(而不是多线程应用程序的瓶颈)。我们可以想象这样一个世界:可互操作的整数类型有29位或60位,而运行时/硬件使用单词的额外剩余位,例如GC、代数类型标记等等。(我认为一些FP实现/运行时实现了其中的一些技巧)等等。。。关键是,如果您将现代函数式语言作为给定语言,然后围绕它设计运行时/硬件,那么它看起来将与今天的典型硬件/运行时大不相同


(我认为我的交流没有那么好,我对许多细节不太清楚,但希望你能领会我论文的要点。)

你说得对,有些语言确实保留了一些基本类型标记(基本上是指针/非指针),但我不确定这一切与你最初的问题有什么关系。你是对的,一台围绕不变性和其他FP属性设计的机器,它看起来与我们的冯·诺依曼机器非常不同。这正是你问的另一个问题的答案的要点。所以我不知道你在问什么@布莱恩:别担心迂回,我觉得如果我们要开发一个功能性硬件,我们会遇到更大的问题。不知怎的,我觉得这些问题是数学问题。当我问我的讲师函数式编程的现状时,他提到了一些数学问题。这个问题的目的是建立一个开放的讨论。我在你的文章中也想到了同样的事情,很明显,我不是唯一一个想到这些事情的人:)你为什么用“有限”这个词?你用这个词来指生产力吗?我明白这是很难做到的