scala - scalaz.concurrent.Future 与 scalaz.ContT[Trampoline, Unit, 相比有什么好处?]

标签 scala concurrency future scalaz continuations

我正在寻找一种用于异步操作的数据类型。

我发现 scalaz.ContT[Trampoline, Unit, ?]支持 scalaz.concurrent.Future 中的所有功能,此外还有 BindRec .

尽管如此,scalaz.concurrent.Future 还有更多实用程序。比scalaz.ContT[Trampoline, Unit, ?] ,例如Applicative 实例并行运行 Futures。

我认为这些实用程序可以用于 ContT[Trampoline, Unit, ?]以及。

作者为什么要新建Future基于 scalaz-concurrent库,而不是重用 ContT ?

最佳答案

冒着开玩笑的风险,一个关键的好处是 Future是一个很多人都会认识和理解的命名概念,例如it has its own wikipedia page .

我不认识 ContT你说的类型是等价的。我试图在 scalaz 文档中找到它,但它是 listed there with no explanation .我在哪里可以阅读更多关于这个的信息,你怎么知道它等同于一个 future ?

你说“一个 Applicative 实例并行运行 Futures”;会多个 ContT操作不能并行运行?这是 Futures 的一个关键特性,并且可能会回答您的问题。

更新:

我现在看到 ContT是延续传递风格的实现,即 scalaz.ContT[Trampoline, Unit, ?]是延续传递函数的一个特例,它可能与 Future 同构,如果某些外部假设成立。

我认为您的问题的答案与许多其他特殊情况被突出的原因相同,因为它们可能被认为是更一般结构的一种情况:

  • 更容易讨论,更容易命名
  • 它更有效,因为实现可以利用一些在一般结构中可能不适用的特殊情况
  • 更容易推理,例如在这里我们可以确定 Future s 是并行执行的,而我们通常不知道关于继续传递函数的内容。 (当然,可以按顺序执行 Futures,就像在一些测试框架中所做的那样,但这不会被视为 Future 的常规实现)
  • 这是一个有用的概念,程序员可以突出显示它并使其易于访问
  • 关于scala - scalaz.concurrent.Future 与 scalaz.ContT[Trampoline, Unit, 相比有什么好处?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143171/

    相关文章:

    c++ - 使用 C++ future 作为函数堆栈中的中间值会导致段错误

    c++ - 在 C++ 中解压参数包

    scala - 如何在scala中将数字拆分为数字

    java - 如何正确加载本地库进行 sbt 测试?

    java - 如何将构造函数类型与 Java 反射与 Scala 基本类型相匹配?

    scala按类型过滤

    java - Android Future 与 FutureTask

    C - 读取器/写入器(并发): Forking & Semaphores Output

    Java swing GUI 卡住

    scala - 如何发现未追踪的 future ?