Second Draft: Coroutines
Atila Neves
atila.neves at gmail.com
Mon Jan 13 17:59:35 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
I had trouble understanding the proposal. If I didn't already
know what a coroutine is, I wouldn't have found out by reading
the abstract. There are a few sentences I didn't understand in
their entirety either such as "If it causes an error, this error
is guaranteed to be wrong in a multi-threaded application of it.".
My main issue is that I don't think the DIP justifies the need
for stackless coroutines (which I think are a good idea). It also
seems more complicated than what other languages have, and I'm
not sure why that is. Why `@async return` instead of `yield`? Why
have to add `@async` to the grammar if it looks like an attribute?
More information about the dip.development
mailing list