微软不会起名
💡
原文中文,约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 结合,简化数据与代码的混合。
➡️