在 Rust 中,异步函数不需要在堆上分配。函数async返回编译器生成的结构,您可以在该结构上调用编译器生成的poll方法。异步的设计看起来逻辑清晰。
C++中协程的设计很奇怪。它迫使您在堆上进行分配,因为您没有其他方法可以使用co_return.
(可以创建一个自定义分配器来在堆栈上的缓冲区中进行分配,但这会使代码不必要地复杂化。)
为什么在 C++ 的设计中决定协程返回的对象必须有一个promise_type?
为什么await_ready,,,await_suspend还await_resume不够?
(这看起来很奇怪,这就是强制你进行分配的原因;你不能直接构造一个SomeTask<T>对象(使用三个await_*方法)并返回它。)
我们如何在没有自定义分配器的情况下制作零分配协程?