强类型语言是否有Promise规范?

5

Promises/A+规范非常适合实现promises,但它在很多地方使用了Javascript的弱类型。是否有一个专为具有强大、静态类型的语言(如C#)设计的Promise规范?


1
在强类型语言中没有直接的类比。然而,处理异步操作的代码扁平化的主要目标可以通过这种或那种方式实现。https://en.wikipedia.org/wiki/Futures_and_promises#List_of_implementations - Kirill Slatin
你为什么认为承诺与强/弱类型有关呢? - freakish
2
@KirillSlatin 你可以创建一个抽象基类,比如 Result,然后传递它的子类。这是静态编程的基础。 - freakish
没有虚拟抽象类,就无法解决这个问题。我觉得这完全不是真的。现在我正在使用强类型的 C# Promise 库,它强制指定每个委托将提供什么样的结果。 - Max Yankov
@MaxYankov 哦,当然,你也可以为所有可能的结果创建一个单独的类。是的,那样更好。哦,但等等,如果我想返回其他东西怎么办?该死...所以,正如你所看到的,这并没有解决问题。它只解决了问题的一个子集。 - freakish
显示剩余9条评论
1个回答

6
许多编程语言都有 Promise,它们是并发编程中有用且基本的构建块。其中很多语言在其基类库中内置了 Promise。

大多数其他编程语言在用户领域都有主要实现,例如Swift和Objective-C的Promise与PromiseKit。

我可以继续列举,但这个模式确实无处不在。大多数语言都在其语言规范中指定了它。JavaScript在承诺方面非常独特,因为有很多不同的实现,并且规范告诉它们如何相互操作。

它们并非所有都与承诺相同,但它们都捕获了一个未来值的相同概念。有些功能更加有限(没有单子链接),但大多数不是。


注意:我假设你是在谈论静态类型(而不是“强”类型),否则你不需要 A+,你需要 https://github.com/fantasyland/fantasy-promises。 - Benjamin Gruenbaum
请注意,这些幻想承诺在设计上是同步的,甚至不会缓存它们的值(更像 IO a)。 - Bergi
@Bergi:fantasy-promise指的是这个讨论:https://github.com/promises-aplus/promises-spec/issues/94,以及Promise A+规范作者/社区缓慢(在某些情况下非常缓慢)意识到Promises是一种单子。从技术上讲,像Haskell这样非常强类型的函数式(而不是面向对象)语言使用单子,这正是半开玩笑的fantasy-promises试图暗示的内容。 - slebetman
@slebetman,“承诺本质上是单子”这一认识自80年代以来就已经被人们所知。只是有些人(现在仍然如此)并不认为这种特定的认识具有意义或重要性 :) (当然,这些不是JS承诺)。 - Benjamin Gruenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接