【问题标题】:advantages of stateful programming? [closed]有状态编程的优点? [关闭]
【发布时间】:2011-12-13 21:13:22
【问题描述】:

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

当我阅读答案时,它让我对相反的问题感到好奇。有状态编程的优点是什么?最近似乎有很多关注无状态代码,但我对趋势保持警惕。

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

【问题讨论】:

  • 我认为你的问题本质上是一个清晰的问题,但是你需要改进它:删除最后一段(它是主观的)并尝试积极地陈述你期望什么样的答案。
  • 为什么这个问题被关闭了,而相反的问题(链接到上面)没有?
  • @JohannesRudolph -- 记录和编辑。
  • 我很想听听这个问题的其他答案。我不相信命令式编程已经流行了这么长时间,而没有比目前提供的更多理由。我根据@JohannesRudolph 的建议重新编辑,以使问题更专注于离散的答案而不是对话——请考虑重新打开。

标签: functional-programming mutable stateless procedural-programming stateful


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    易读性是关键。我喜欢函数式编程(目前我正热衷于 clojure 狂欢),但状态是世界的运作方式。面向对象范式比函数式或任何其他类型的编程更流行,这并非偶然。 OOP 和过程式编程是新程序员阻力最小的途径。大多数人直观地将对象的概念理解为改变状态(它可以移动或改变颜色等)的东西,而不是有助于递归的 Y 组合器。

    【讨论】:

    • 我不知道我是否买了这个。毕竟,它们是“阻力最小的路径”的一个原因是因为 OOP 语言已经如此流行,这意味着它们有更多的教程、更多的工具、更多的 IDE,以及更多的东西。但流行并不意味着概念简单。
    • 对于某些语言,我同意这一点(实施良好的 OOP 非常好)。我的观点是人们在状态下思考。世界本身只是一个有限状态机。
    • “国家是世界的运作方式”——一个高度投机的哲学假设。有人可能会反驳说:“数学和量子力学是世界运转的方式(在某些情况下似乎存在状态)。”
    【解决方案3】:

    状态很重要。这个宇宙中的每一点都有状态,状态定义了系统的行为方式,状态使系统动态和可用,但由于状态如此重要,因此如何访问和操作该状态也很重要。如果任何人都可以操纵其他人的状态(状态作为人脑中的内容),那将是不好的。 我对状态的看法是,它应该是明确的,不应该是分散在你的代码中的东西,并且变得非常隐含,很难知道系统处于什么状态以及系统的哪个部分负责哪个部分国家。状态应该以这样的方式控制,你可以很容易地说系统的这部分状态是由这个模块处理的,并且只有这个模块。

    在任何现实世界的 FP 程序中,它总是有 2 个部分,一个是无状态的,它是您的核心算法等,另一个部分将保持程序的状态。

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多