我相信(从一些阅读中)读取/写入总线上从CPU缓存到主存储器的数据对计算任务(需要通过总线移动数据)的完成速度产生了相当大的限制--Von Neumann瓶颈.
到目前为止,我已经遇到过一些文章,其中提到函数式编程比其他范式(例如命令式方法)更具性能.OO(在某些计算模型中).
有人可以解释纯功能编程可以减少这个瓶颈的一些方法吗?即.发现(一般)以下任何一点是真的吗?
使用不可变数据结构意味着通常较少的数据在该总线上移动 - 更少的写入?
使用不可变数据结构意味着数据可能更容易在CPU缓存中闲置 - 因为对现有状态的更少更少意味着缓存中的对象刷新更少?
是否有可能使用不可变的数据结构意味着,我们可能会经常甚至从来没有读取数据从主内存回来,因为我们在计算过程中创建对象并使其在本地缓存中,然后在相同的时间片创建一个新的不可变对象关闭它(如果需要更新),那么我们永远不会使用原始对象,即.我们正在使用位于本地缓存中的对象进行更多工作.
我理解递归函数的问题和堆栈溢出问题的风险.
但是,如果函数能够针对尾递归进行优化,那么为什么不会自动应用此优化,即.为什么我需要标记一个可以优化的功能@tailrec?