函数式编程有什么弊端?
我接触过Haskell、Clojure和其他语言,也做过PL的“研究”。可以浅谈一下:
函数的复杂度
分析Haskell程序的时间和空间复杂度是很麻烦的。首先编写Haskell程序往往是很多“重用”内置/自定义数据结构,以实现数据持久性(或“不变性”)可以增加空间和时间消耗(实现策略有很多,但采取临时解决方案不影响永久治愈),优点是控制副作用。然后,函数组合和高阶函数可能代价昂贵,可以生成额外的中间数据。其优点是抽象能力强,模块化是有益的。最后,惰性评价使过程评价模型复杂,滥用可导致效率的降低。功能语言的分析工具也较少。
简而言之,就是消除中间数据结构+,降低函数成本。编写高效的程序需要经验,对底层实现有一点了解(标准库+语言核心),c++没有,但是c++对程序有更好的控制。
模块化和并行性
模块应该是基本软件元素(操作、类型、变量等)的组合,用于重用、扩展服务。“函数式编程的主要价值在于极大地提高程序的模块化程度,”Huges在函数式编程(函数式编程经典)的解释中说。高阶函数、递归数据类型和延迟评价是“新粘合剂”。
但是这些提供了细粒度的模块化,程序员需要更多的“设计”。“使用函数式编程的程序员必须努力确保程序使用更小、更简单、更通用的模块,”Huges说。这是一个挑战。
而且,模块之间的交互也是一个问题。
广告 您可能关注的内容 |