21

我只是比较不同的 scala actor 实现,现在我想知道在 2.10 中弃用现有 scala actor 实现并用 Akka 实现替换默认 actor 的动机是什么?迁移指南和第一个公告都没有给出任何解释。

根据比较,这两种解决方案有很大的不同,因此保留两者都会有好处。因此,我想知道导致此决定的现有实施是否存在任何重大问题?换句话说,这是技术决定还是政治决定?

4

1 回答 1

21

我不能不给你一个猜测的答案:

Akka 提供了一个稳定而强大的库来处理 Actors,以及许多处理高并发的特性(futures、agents、transactionalactors、STM、FSM、非阻塞 I/O,...)。

此外,它以比 scala 更安全的方式实现 actor,因为客户端代码只能访问 generic ActorRef。这使得除了通过消息传递之外无法与参与者进行交互。
[编辑: 正如 Roland 指出的那样,这还可以通过监督层次结构和位置透明性实现容错等附加功能:无需更改客户端代码即可在本地或远程部署参与者的能力。 整体设计更接近于 erlang 中的原始设计。]

许多核心功能在 scala 和 akka actor 中重复,因此统一似乎是最明智的选择(鉴于这两个库的开发团队现在也是同一公司的一部分:Typesafe)。
主要收获是避免重复相同的核心功能,这只会造成混淆和兼容性问题。

鉴于需要做出选择,剩下的只是决定哪个是标准实现。

很明显,Akka 在这方面可以提供更多功能,它是一个成熟的框架,已经包含许多企业级功能,并且在不久的将来还会有更多功能。

我想不出 scala.actors 能够完成 akka 无法完成的特定情况。


ps 做了类似的推理,导致在 2.10中统一了标准的future/promise实现

整个 scala 语言和社区必须从简化的界面到基础语言特性中获益,而不是由不同框架组成的碎片化场景,每个框架都有自己的语法和模型需要学习。

对于其他更高级的方面,如网络框架,开发人员从更丰富的可用解决方案全景中获益,则不能这样说。

于 2013-01-30T13:35:42.783 回答