Léo*_* 준영 2 lambda von-neumann
布莱恩在他的论证中提出的前提是"副作用是好事吗?" 很有意思:
计算机是von-Neumann机器,旨在很好地处理效果(而不是设计为与lambda一起使用)
我对这些方法的并置感到困惑.我看不出它们是黑白的.什么是证明价值:
计算机是von-Neumann机器,设计用于效果良好[1]
最后一部分让我困惑:
而不是设计为与lambdas良好协作[2]
Lambdas是否用作函数式编程的符号?或者它们是功能性编程的表现吗?什么是真正的信息?
在什么意义上,前提[1]和[2]的部分是对的?回复中隐藏的前提是什么?有人可以证明原始前提吗?von-Neumann机器和Lambdas如何真正起作用?
以下是对更深入我的意思,虽然这将是有趣的,如果其他人同意或他们说什么.
考虑一下计算机如何工作.你有硬件有整数和浮点寄存器,以及大量的随机存取存储器,以及大多数形式'基于读取该寄存器/存储单元的值的指令,将这个新值戳到这个寄存器中/细胞'.(更新存储器单元在缓存行和一致性以及内存模型等方面具有各种性能影响.)整数为32或64位,几乎所有编程语言都表现出与硬件完全匹配的这些数据类型.几乎每个运行时都使用一个小的调用堆栈,其中堆栈分配的对象很便宜,而且更昂贵的"堆"可以在需要非堆栈生命周期时创建和销毁其他对象.
现在考虑大多数现代函数式编程语言 不变性是常态; 你很少会用新的价值来'戳'记忆.(这意味着您创建了更多新对象,这意味着您可以分配更多.)Lambda和continuation是常态; 你很少有对应生命周期对应的堆栈.(实际上,一些FP运行时不使用堆栈;在CPS实现中,堆栈和程序计数器的概念是不合适的.)递归是一个循环结构,所以你至少需要'尾'调用才能消耗无论如何,堆栈.实际上一切都需要"堆"分配,当然你需要一个垃圾收集器.代数数据类型提供标记数据; 从理论上讲,这些标签只需要额外的2或3位数据,但为了匹配运行时间,它们通常需要额外的内存字或更多内存....我有点蜿蜒,但是你在FP语言中经常做的事情往往与那些在典型的计算机硬件架构和基本语言运行时上最差或最昂贵的东西相对应.
它不一定是这样.可以想象一个运行时避开堆栈的世界,并使堆/分配快速(而不是多线程应用程序的瓶颈).可以想象一个世界,其中可互操作的整数类型具有29或60位,并且运行时/硬件使用该单词的额外剩余位,例如GC,或代数类型标签,或诸如此类的东西.(我认为一些FP实现/运行时会做一些这些技巧.)等等......重点是,如果你把现代函数语言作为给定的,然后围绕它设计运行时/硬件,它会看起来非常不同从今天的典型硬件/运行时间.
(我认为我没有那么特别地传达,我对我不确切知道的许多细节都不精确,但希望你在这里弄清楚我的论点的主旨.)