对,我也觉得 coroutine 的实现很简单。关键在于理解 coroutine 的应用场景。经典的把 generator 用在编译器语法解析以及网络编程特别好用,不搞那些弯弯绕绕的 vistor/callback 模式。把 coroutine 用在 gui 编程也特别好用——这个领域我看目前最强的可能是 c#. js 和 c++ 社区都是稀烂。
你说的那一套 modern http 把序列化和反序列化和 http client 耦合起来了,还有流式 API 是 rxjava 那个流派的玩法。事实上,我有一套使用 qt 反射自动序列化和反序列化的未开源模块。不过我不想把它们做到一块来。我做的是简洁友好API的 http client,不是高性能,也不是 modern http client. 目标是让人一看就懂,用起来不容易出错。
【 在 hanjiamajia (hanjiamajia) 的大作中提到: 】
: 标 题: Re: 最近在怒学coroutine
: 发信站: 水木社区 (Tue Sep 15 17:11:56 2020), 站内
:
: 【 在 hgoldfish 的大作中提到: 】
: : 因为 c++ coroutine 是没什么卵用的基础库。连 generator 都还没有,相当于 llvm ir 字节码的简单的映射。上面还必须搭一层事件循环才能真正用起来。
: : 理解 c++ coroutine 其实是我们这些基础库程序员的责任,一般 c++ 用户不必去深究。
: :
:
: 因为c++20只是包含编译器需要实现的底层功能
: 真正的库最后讨论的时候冻结了啊,要c++23才能加进来
: 上面有朋友说的 cppcoro 就是类似的库呀
:
: coroutine 的概念很简单,简单实现一个很容易
:
: 但是说实话你的那个库设计的真的不 modern 啊,简单看了下,接口设计感觉像很多年前的风格。
: 而且没有 async await 的协程现在已经没有什么使用价值了感觉
:
: 比如现在的 http 库至少应该像下面的样子(包含await 和 自动反序列化):
:
: auto http_result<Model> r = co_await new http<Model>()->add_param("k","v")->add_header("k","v")->add_body("k","v").request("post");
: Model m = r.result;
:
: --
: ※ 修改:·hanjiamajia 于 Sep 15 17:15:27 2020 修改本文·[FROM: 211.249.40.*]
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 211.249.40.*]
--
修改:hanjiamajia FROM 211.249.40.*
FROM 124.72.119.*