| ▲ | hencq 3 hours ago | |
I like the overview given in this Stackoverflow answer [1] (based on an even earlier comment) which classifies different types of continuations: - Asymmetric or symmetric - Stackful or stackless - Delimited or undelimited - Multi-prompt or single prompt - Reentrant or non-reentrant - Clonable or not Based on that these generators (or semi-coroutines as the article also calls them) seem to be asymmetric, stackful, delimited, single prompt(?), non-reentrant continuations. [1] - https://stackoverflow.com/questions/62817878/what-are-the-sp... | ||
| ▲ | matheusmoreira 21 minutes ago | parent [-] | |
That's a great overview. Yeah they are asymmetric, Wikipedia says symmetric and asymmetric correspond to coroutines and semicoroutines. They are also stackful and delimited. They are single shot by design, though I could easily make it possible to restart the generator from scratch if needed. As for single prompt vs multiprompt... I'm not too sure about this one. I have a check to prevent recursion but nesting generators shouldn't be a problem since they keep track of their own callers. I think lone's generators have composability issues due to the stack separation. For example, calling a generator g2 inside another generator g1 doesn't transparently yield values from g2 to g1's caller. I've been wondering about how to fix this without a Python-like yield from primitive. | ||