Second Draft: Coroutines

Richard (Rikki) Andrew Cattermole richard at cattermole.co.nz
Mon Jan 13 18:51:27 UTC 2025


On 14/01/2025 6:59 AM, Atila Neves wrote:
 > 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.".

I do not understand why you are having trouble with it.
It has not come up before and Gemini understood it.
It is short, precise and complete to what I mean.

If you want me to change it, I need a lot more feedback including:

- How you are interpreting it
- What questions you had after reading it
- what did you expect it to contain

As it currently stands this is not constructive feedback, there is 
nothing I can do with it. I do not understand what problems you are 
having with it.

> It also seems more complicated than what other languages have, and I'm 
> not sure why that is.

Its not more complicated, but I can understand that it may appear that way.

Other languages can tie the feature to a specific library, which will 
not work for us.

Consider why we cannot: a coroutine language feature is tied to its 
representation in library, which is tied to is eventloop, which is tied 
to sockets, windowing, pipes, processes, thread pool ext.

None of which can be in druntime, has to be Phobos. But we cannot tie a 
language feature to Phobos, and if we do that I cannot experiment prior 
to PhobosV3 to ensure it both works as expected and to learn if any 
further expansion is needed.

Also coroutines are used in both generative and event handling basis, 
they are not the same library wise. Tieing it to just one is going to be 
hell for someone. Most likely me as I'm responsible for the user experience.

> Why |@async return| instead of |yield|?

Then ``yield`` would be a keyword, which in turn breaks code which is 
known to exist.

There is no benefit to doing this. But we _could_ do it.

However there is a good question here, why not combine ``await`` 
statement with ``@async return``? Well the answer is you may want to 
return a coroutine, which couldn't be differentiated by the compiler.

> Why have to add |@async| to the grammar if it looks like an attribute?

All language attributes are in the grammar, there is nothing special 
going on there.

https://dlang.org/spec/grammar.html#attributes



More information about the dip.development mailing list