xml*_*lmx 4 c++ standards coroutine goroutine c++14
我认为coroutine/goroutine在很多并发小任务必须快速执行的情况下非常有用.目前std::thread不能满足要求,因为它的成本很高.
我还认为只能通过C++库来支持coroutine/goroutine,它应该由语言的核心功能直接实现.因为coroutine/goroutine具有特殊的语义,在当前的C++标准中没有相应的概念.
如果我们添加一个新关键字cppgo,那么我们可以编写如下代码:
void f(int n)
{
...
}
int main()
{
for (int i = 0; i < 10000; ++i)
{
cppgo f(i);
}
}
Run Code Online (Sandbox Code Playgroud)
多酷啊!
C++ 1y标准是否被认为支持coroutine/goroutine?
有几个与协同程序有关的提议,但它们不针对C++ 14,而是针对更高版本.以下是其中一些建议:
resumable功能和await指令/表达(?))还有其他或多或少的相关论文(查看并发相关论文和未来相关论文,你会看到允许协程的趋势).
有些人还讨论了可能性,有"展开单子"一般的语法(如await中提出关键字1),这将两个工作std::future和其他非并发相关的类型,如optional或expected.这些特征将允许将相同的算法无缝地应用于可恢复和不可恢复的功能,无论是否涉及并发.至少在理论上.
以下是人们在做和批评这些提案时与这些协程和monad概念相关的讨论列表: