微软不会起名

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

微软在协程命名上存在误导性问题,原作者使用的 Task<> 和 promise_type 命名不准确,导致混淆。应将其改为 awaitable<> 和 coro_frame,final_suspend 应改为 resume_caller,await_suspend 和 await_resume 也需重新命名,以更好地反映实际功能。整体设计应简化,避免数据与代码混合。

🎯

关键要点

  • 微软的协程命名存在误导性,Task<> 和 promise_type 的命名不准确。
  • 应将 Task<> 改为 awaitable<>,promise_type 改为 coro_frame,以更好地反映实际功能。
  • final_suspend 应改为 resume_caller,因为它的功能是恢复调用者,而非挂起。
  • await_suspend 应改为 await_setup,await_resume 应改为 await_result,以准确描述其功能。
  • initial_suspend 和 final_suspend 的设计应与 awaitable 结合,promise_type 应仅作为数据存储对象。

延伸问答

微软在协程命名上存在哪些误导性问题?

微软的协程命名中,Task<> 和 promise_type 的命名不准确,导致混淆。应改为 awaitable<> 和 coro_frame。

为什么 Task<> 应该改为 awaitable<>?

因为只有被 spawn 出来的协程才叫任务,而 awaitable<> 更准确地描述了可异步等待返回的函数。

final_suspend 的命名为何被认为是误导性的?

final_suspend 实际上是恢复调用者,而不是挂起,因此应改为 resume_caller。

await_suspend 和 await_resume 的命名有什么问题?

await_suspend 应改为 await_setup,因为它是恢复 B 的状态,而 await_resume 应改为 await_result,表示获取结果。

promise_type 的设计有什么缺陷?

promise_type 应仅作为数据存储对象,不应携带执行代码,避免混淆。

如何简化微软的协程设计?

应将 initial_suspend 和 final_suspend 的设计与 awaitable 结合,简化数据与代码的混合。

➡️

继续阅读