functional-programming - 有状态编程的优点?

标签 functional-programming mutable stateless procedural-programming stateful

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我想知道无状态编程的好处,发现有人分享了我的问题:
Advantages of stateless programming?

不过,当我通读答案时,这让我对相反的问题感到好奇。有状态编程的优点是什么?最近似乎有很多关注无状态代码,但我对趋势持谨慎态度。

似乎有状态(即命令式)编程可能比无状态(即函数式)编程更适合某些场景,我希望能够更好地识别有状态编程可以解决哪些问题。

最佳答案

与不可变的无状态编程模型相比,基于可变共享状态的编程模型在少数情况下具有无可争议的优势。可变性可以带来巨大优势的一个领域是允许算法就地工作。 haskell wiki 有一个关于实现快速排序的很好的例子:http://www.haskell.org/haskellwiki/Introduction#When_C_is_better

总结一下,当您不允许修改列表内存时,您需要创建它的排序副本。几乎任何其他修改某些数据结构的算法也是如此,例如AVL 树。

一般来说,函数式编程语言比它们的命令式语言更需要内存。现在内存很便宜,但带宽至关重要,而且内存速度的增加与我们看到的 CPU 功率的增加并不成正比。然而,必须注意的是,Haskell 的执行模型允许编译器执行一些漂亮的优化,包括内存使用和访问模式。这在一定程度上可以弥补理论上的不足。

关于functional-programming - 有状态编程的优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871842/

相关文章:

rust - 如何在 Rust 中将可变向量作为函数参数传递?

web-services - 如果 REST 是无状态的,那么它如何处理来自客户端的多个请求?

java - 如何获取登录用户无状态bean

list - 在 OCaml 的列表中查找唯一元素

javascript - 使用原始的非过滤元素过滤功能语言?

Python:args -> *args 的一些函数(类似于 functools 中的函数)

c++ - boost::序列化可变成员

c# - 是否可以通过 F# 创建第三方可变结构 "more immutable"?

rest - 休息应用程序中的观察者设计模式

java - Clojure:是否可以继承用 :gen-class 定义的类的状态?