Second Draft: Coroutines
Sebastiaan Koppe
mail at skoppe.eu
Thu Jan 23 09:00:14 UTC 2025
On Thursday, 12 December 2024 at 10:36:50 UTC, Richard (Rikki)
Andrew Cattermole wrote:
> Stackless coroutines, is a way to enable asynchronous
> programming, for lesser skilled and less knowledgable people
> whilst offering efficient processing of events, safely.
>
> This version of the proposal has been rewritten to account for
> a lack of understanding on the separation of library code
> versus what the language is offering.
>
> And a few changes related to yielding. Yielding is no longer
> guaranteed to be implicit. You may explicitly yield using an
> ``await`` statement should you wish to. The library type must
> support implicit yielding if you wish to use it. Both may be
> used on the same type, it is entirely dependent upon the called
> methods attributes.
>
> Lastly, the changes have been made to simplify the descriptor
> to make the implementation within the compiler a little bit
> easier. It does mean that you as a library author have no way
> to know about the functions in the state machine (not that you
> could have done much with them).
>
> Current:
> https://gist.github.com/rikkimax/fe2578e1dfbf66346201fd191db4bdd4/649a5a6cc68c4bfe9f5a62f746a3a90f6b4beaf4
>
> Latest:
> https://gist.github.com/rikkimax/fe2578e1dfbf66346201fd191db4bdd4
The design as presented isn't focused enough IMO. It lacks detail
in core areas and adds in too many (questionable) nice-to-have or
day-two features.
I believe the challenge with coroutines is twofold: 1) the code
transformations and 2) how/when to resume suspended coroutines.
Then there are secondary goals like extensibility/flexibility and
eliding allocations.
Additionally, the DIP has no reference to C++'s coroutine
feature. I am sure there is a ton written on the subject by
users, implementors, designers, etc.
A good starting point would be the official reference
https://en.cppreference.com/w/cpp/language/coroutines as well as
Lewis Baker's blog:
https://lewissbaker.github.io/2022/08/27/understanding-the-compiler-transform (part 5 of 5), who is knee-deep in this stuff.
More information about the dip.development
mailing list