C++中的future是否对应于JavaScript中的promise?

5

我是一名C++程序员,最近尝试学习std::futurestd::promise。当我随机搜索关于future/promise的一些信息时,我发现JavaScript中有关于future/promise的讨论,并且JavaScript中的promise具有then函数。在C++中,即使std::future现在没有then函数,但是一些提案已经提到了它。因此,有两个问题:

  1. std::future在C++中是否对应于JavaScript中的promise?
  2. 如果问题1是真的,为什么他们混淆了future和promise?
2个回答

4
  1. 是的。
  2. std::future<T> 表示一个将来会持有类型 T 的结果的 future 对象。即该对象在未来某个时间点将会持有一个 T。而 std::promise<T> 是一个承诺在未来某个时间点提供一个类型为 T 的对象。

哪种语言的命名更为正确存在争议。


4
“哪种语言的命名是正确的”这个问题有争议。事实上,“未来”或“承诺”并不是单一的东西,而更像是异步结果的一类东西。不同的地方使用这些词的方式也不尽相同——有时可以互换使用,有时又会定义出不同的含义。且一个地方的承诺并不一定对应于另一个地方的承诺;同样,期货也是如此,期货-承诺也是如此。 - VLAZ

1
动态类型语言有时会将在静态类型语言中分离的概念结合起来。JavaScript Promise 基本上是 C++ Promise 和 Future 的组合体。在 JavaScript 中,resolve 和 reject 函数大致对应于 C++ 中的 Promise 一侧,而 then 函数大致对应于 C++ 中的 Future 一侧。
此外,在 JavaScript 中,then 也可以组合 Promises。你可能认为这是第三个特点,但在实践中,没有组合,Futures 实际上并不是非常有用。

对于 xstd::async([](int x) {return x;}) 只返回一个值为 xfuture,它是否与 resolve 相同? - macomphy

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