【问题标题】:Is there a promise spec for strongly typed languages?是否有强类型语言的承诺规范?
【发布时间】:2015-09-22 15:45:45
【问题描述】:

Promises/A+ 规范非常适合实现 Promise,但它大量使用 Javascript 的弱类型。是否有针对具有强静态类型的语言(例如 C#)设计的 Promises 规范?

【问题讨论】:

  • 在强类型语言中没有直接的类比。然而,主要目标 - 以这种或那种方式实现处理异步操作的扁平化代码 en.wikipedia.org/wiki/…
  • 是什么让你认为 promise 依赖于弱/强类型?
  • @freakish 事实上,从链中的任何级别,您都可以返回一个值(它将提供链中的下一个处理程序)或返回一个承诺(它将在下一个处理程序之前粘在链中)。你将如何在强类型语言中返回任意对象或承诺?
  • @KirillSlatin 你创建了一个抽象基类,比如Result,然后传递它的子类。老兄,这是静态编程的基础知识。
  • @freakish 例如,在 C# 和 Java 中都有一个抽象基类。它被命名为“对象”。使用它是一个非常糟糕的主意,因为它会抛出大量类型安全检查——例如,尝试使用 .NET 1.0 非泛型集合。这是糟糕的静态编程的基础知识。

标签: javascript promise specifications strong-typing


【解决方案1】:

许多语言都有承诺,它们是并发的有用且基本的构建块。他们中的许多人都在其基类库中内置了 Promise。

大多数其他语言在用户空间中都有主要的实现,例如 Swift 和 Objective-C 的 Promise 和 PromiseKit。

我可以继续说下去,但这种模式真的无处不在。大多数语言都在其语言规范中指定了它。 JavaScript 的独特之处在于有多少实现承诺,规范告诉他们如何相互操作

它们并不都与 Promise 相同,但它们都捕捉到了相同的未来值概念。有些更受限制(没有单子链接),但大多数不是。

【讨论】:

  • 注意:我假设你在谈论静态类型(而不是“强”)类型,否则你不想要 A+ 你想要 github.com/fantasyland/fantasy-promises
  • 请注意,这些幻想承诺在设计上是同步的,甚至不缓存它们的值(更像IO a
  • @Bergi:那个幻想承诺指的是这个讨论:github.com/promises-aplus/promises-spec/issues/94 以及承诺是一个单子的承诺 A+ 规范作者/社区的缓慢(在某些情况下非常、非常缓慢)实现。从技术上讲,像 Haskell 这样的强类型函数式(不是 OO)语言使用 monad 来代替,这是半开玩笑的幻想承诺试图暗示的。
  • @slebetman 认识到“承诺本质上是单子”是 80​​ 年代以来众所周知的事情。人们只是没有(有些人仍然没有)发现特定的实现有意义或重要:)(当然,这些不是 JS 承诺)