如果状态被认为是函数的一个坏主意,为什么在使用MailboxProcessor时它被认为是好的,拥有一个状态呢?
为了扩展,我向某人解释了函数编程,函数如何不使用状态(在函数之外没有变量--即相同的数据输出到相同的数据中)以及这带来的好处。但是,我想到了MailboxProcessor以及它使用递归在函数调用之间持久化状态的方式,并且我不能完全理解为什么在这种情况下它是可以的。
这是一种最不坏的持久化状态的情况吗?
发布于 2014-04-09 13:34:55
邪恶真的是共同的变化无常的状态。在单线程情况下,共享可变状态意味着函数不能安全地组合--因为一个调用可以修改某个状态,然后被第二个调用读取,因此您将得到意想不到的结果。在多线程情况下,共享可变状态意味着您可能存在竞争条件。
函数式编程一般避免变异。函数仍然可以共享某种状态(例如,闭包可以捕获一个状态),但是不能对其进行变异。在单线程情况下,也不存在非决定论.在多线程情况下,在纯功能风格下,您所能做的几乎只有做叉-连接并行(和数据并行),它不需要可变的状态,并且是完全确定性的。
基于代理的编程也避免了共享的可变状态,但方式不同.您的独立代理只能共享不可变的消息。因此存在一些不确定性(因为它们通过发送消息进行通信),但它们只交换不变的值。实际上,您甚至可以在代理中使用可变状态--只要它不是共享的,仍然可以避免共享可变状态。
https://stackoverflow.com/questions/22963775
复制相似问题