我看了这个演示《使用Akka 2.0实现可组合的Futures》,现在我很好奇Akka实现的Futures和Agents相比Clojure的有哪些额外的特性。
在Akka中,代理人(Agents)的灵感来自Clojure语言中的代理人。这是关于代理人部分的问题的第一行文档。至于Future方面,它们在概念上是相同的(即在单独的线程上调用操作)。底层实现基于java.util.concurrent
,因此两者使用相同的基础架构。
Scala部分:重要的是如何将“可组合”这个词应用于代理人和Future(对于两者都是如此)。如果您阅读akka文档,您将发现可以在Akka futures上使用高阶函数,例如map
, filter
等。即,对未来的映射操作返回另一个未来(类似地对于filter
)。这使您可以轻松地组合/链接未来并等待最终未来的最终值。现在,所有这些都是可能的,因为map
、filter
、for
等推导都基于Scala(单子)API,该API基本上允许任何新类型提供这些函数的特定实现。
Clojure部分:在Clojure方面,您知道map
, filter
等仅仅是可以遍历集合的常规函数,因此它们与scala的单子API不同。因此,在Clojure中,您将使用不同的方式来组合Future,毕竟Clojure(或Lisp一般)允许以许多方式进行组合。