[HN Gopher] A Mental Model for C++ Coroutine
___________________________________________________________________
A Mental Model for C++ Coroutine
Author : uvdn7
Score : 28 points
Date : 2025-07-11 17:23 UTC (2 days ago)
(HTM) web link (uvdn7.github.io)
(TXT) w3m dump (uvdn7.github.io)
| mog_dev wrote:
| Interesting article, but you should use a spell checker. Typos
| are distracting.
| uvdn7 wrote:
| I am not a native speaker and I joke about my typos and grammar
| mistakes being the evidence that none of my code or post is AI
| generated. Sorry about the typos. I just fixed all the ones I
| can find. Hope it's better now.
| valorzard wrote:
| i appreciate that you don't use AI. I like real human stuff
| valorzard wrote:
| Note that with std::execution, c++26 will have a default async
| runtime (similar to how C# has a default async runtime).
|
| This means that c++26 is getting a default coroutine task type
| [1] AND a default executor [2]. You can even spawn the tasks like
| in Tokio/async Rust. [3]
|
| I'm not totally sure if this is a GOOD idea to add to the c++
| standard but oh well.
|
| [1] https://www.open-
| std.org/jtc1/sc22/wg21/docs/papers/2025/p35...
|
| [2] http://wg21.link/P2079R5
|
| [3] https://www.open-
| std.org/jtc1/sc22/wg21/docs/papers/2025/p31...
| uvdn7 wrote:
| > I'm not totally sure if this is a GOOD idea to add to the c++
| standard
|
| What are the downsides? Naively, it seems like a good idea to
| both provide a coroutine spec (for power users) and a default
| task type & default executor.
| valorzard wrote:
| well, Rust didn't do the same thing for a reason. Rust lets
| you pick and choose what async runtime to use (even though
| everyone has decided to use Tokio anyways). This is good
| because it allows for alternative async runtimes like Embassy
| (https://embassy.dev/) and it also doesn't freeze the API
| into something that can't change. It could totally be
| possible that people find a new style of async that works
| better than std::execution.
| Rohansi wrote:
| I don't know how it works for C++ but you're not locked
| down to a single implementation with how C# does it. You
| can have it use different executors/schedulers, different
| task types, etc.
| uvdn7 wrote:
| You are also not locked down in C++. There are already a
| handful of coroutine and async runtime implementations
| out there.
| a_t48 wrote:
| I'm excited to actually getting around to trying coroutines -
| they should be a good replacement for simple state machines.
| Rather than an storing an object with a state enum, I can write
| simple declarative code.
| spacechild1 wrote:
| In my latest personal project I have switched my asio
| networking code from callback functions to coroutines. It is
| such a big improvement! Repeated actions can be written as
| simple loops, error handling is done with exceptions and the
| code is generally much easier to follow. And here's the icing
| on the cake: most data can actually stay in local variables,
| which means I don't have to care about the lifetime!
| nickelpro wrote:
| Random switching between "Awaitor" and "awaiter" makes it seem
| like these are distinct concepts instead that the reader is
| supposed to understand.
|
| In general this moves way too fast for the density of the grammar
| it's trying to introduce, lines like:
|
| > We have seen Awaitors already - suspend_always is an empty
| awaiter type that has await_ready returns false always.
|
| But we haven't "seen" suspend_always, it's mentioned in half a
| sentence in an earlier paragraph, with no further context or
| examples.
|
| There's a reason Lewis Baker's writings about C++ coroutines are
| 5000 word monsters, the body of grammar which needs to be covered
| demands that level of careful and precise definition and
| exploration.
| michaelg7x wrote:
| Amen. Even with those 5k word monsters it's brutally hard.
| Andreas Fertig's cpp-insights is really helpful, when is able
| to complete the coroutine transform.
|
| FWIW, I think a useful addition would be for compilers to
| output the intermediate source code, so you can reason more
| easily about behaviour and debug into readable code.
| gpderetta wrote:
| I recently decided that it was time to properly learn C++
| coroutines. I looked at a few tutorials, but by far the best was
| Raymond Chen coroutine series[1]. It is a long series, but every
| article is just the right size. Strongly recommended.
|
| [1]
| https://devblogs.microsoft.com/oldnewthing/20210504-01/?p=10...
___________________________________________________________________
(page generated 2025-07-13 23:01 UTC)