函数式编程,在哪些领域效率低下,为什么很难确定空间和时间成本



我一直在阅读函数式编程,我有两个问题希望有人能帮我。

  1. 我读过一篇文章,如果你经常访问相同的数据,懒惰的函数程序可能会效率低下,因为检查表达式是否已求值会带来额外的开销。我还阅读了以下线程的第一个答案(函数式编程语言适合图形编程吗?),在图形编程的上下文中,函数式编程可能需要资源,因为它创建了很多临时对象(我认为这与必须创建新对象来模拟状态有关?)

在OOP/过程编程的比较中,是否有其他领域的功能编程可能会导致资源密集/效率低下?

  1. 我在下面的帖子(函数式编程的陷阱/缺点)中读到了第一个答案,"很难预测评估一个懒惰的函数式程序的时间和空间成本"。有人能简单解释一下(如果存在的话)为什么会出现这种情况吗?我认为这与在需要时只进行惰性求值的求值表达式有关,但为什么预测一种最坏的情况不简单呢?这种情况类似于命令式编程,在命令式编程中,所有内容都要求值

我读过一篇文章,如果你经常访问相同的数据,懒惰的函数程序可能会效率低下,因为检查表达式是否已求值会带来额外的开销。

这包括检查指针上的标记位。它很便宜。

在图形编程的环境中,函数编程可能需要资源,因为它会创建许多临时对象

这取决于实施情况。纯FP语言中的分配很便宜,因为不变性意味着您可以避免一些写障碍。对象分配大致类似于OO语言,尽管一些GC(如GHC)与Java相比非常高效。

在OOP/过程编程的比较中,是否有其他领域的功能编程可能会导致资源密集/效率低下?

有很多问题需要非常紧张的资源使用。例如操作系统。在这样的环境中,您需要库来直接访问硬件,并能够在适当的位置更改内存。根据您使用的函数式语言实现,您可能有也可能没有。

很难预测评估一个懒惰功能程序的时间和空间成本

对懒惰评估成本进行建模比较困难,因为所做的工作量以及何时完成取决于仅在运行时可用的输入数据。

实际上,语言可以让你选择是使用严格评估还是懒惰评估,因为两者都不适合所有情况。

最新更新