【发布时间】:2012-12-10 15:23:52
【问题描述】:
我刚刚在 Coursera 上完成了 Martin Odersky 的 scala 课程。 Scala 是我的第一个 FP 语言,我对限制可变状态的想法感到兴奋。这允许更容易的并发性,也使代码超级可维护。
在学习所有这些的过程中,我意识到你可以保证一个对象的可变性,只要它没有可变变量并且只引用不可变对象。所以现在我可以通过创建新状态而不是修改旧状态来完成所有工作,尽可能使用尾递归。
太好了。所以我只能做到这一点。在某些时候,我的应用程序需要能够修改一些现有状态。我知道此时在哪里进行并发控制,锁,等等。我仍然默认使用我一直使用的标准多线程并发控制。
哦 scala 社区,有没有更好的方法?也许是单子?
编辑:这个问题有点笼统,所以我想给出一个用例: 我有一个机器学习算法,可以存储多个数据集合。它们具有返回数据(训练等)的更新表示的函数,所有这些都是不可变的。最终,我可以保持这种返回更新状态模式沿着链向上运行到运行模拟的实际对象。这具有可变的状态并保存对集合的引用。我可能想分发到多核或多系统。
【问题讨论】:
-
隐藏actor内部的可变性
-
我之前在一个项目中使用过akka actor,它做得非常好,并且非常适合在服务器之间分配负载。是否有适合本地规模的更轻量级演员?
-
我觉得这个问题太主观了。也许对程序员更好。stackexchange
-
@ColinGodsey 还有 Scala Actors(与 Akka Actors 相对),标准 Scala 发行版附带的实现。预计未来会被Akkaactors替代,但你试过了吗?
-
@ColinGodsey:我也在使用 Scala 进行机器学习,我有一个关于不可变更新性能的related concern。我们都知道不变性的美妙之处,但在我看来,机器学习是一个完美的例子,其中可变数据结构有时非常易于使用和/或更快,因此请谨慎选择。
标签: scala