Check out Dart's iterators
David Bruant
bruant.d at gmail.com
Sun Feb 10 12:13:52 PST 2013
I have continued my wanderings on that topic elsewhere. Sharing as food
for thought:
Le 10/02/2013 16:21, David Bruant a écrit :
> <idealworld>
I initially thought that yield could be the sugar of "endframe as
yield(value)", but yield and return/throw are different. In the former
case, the frame can (and likely will) be re-entered which is not the
case for the latter. This begs for 2 different keywords. Let's call them
"endframe" and "yield". yield could come in 2 forms:
// generic
yield as return(value)
yield as throw(value) // which is impossible today?
// sugar
yield value
// which desugars naturally to
yield as return(value)
To re-enter a frame, the following could be used:
reenter generator as return("yo") // equivalent of current
generator.send('yo')
reenter generator as throw("yo") // equivalent of current
generator.throw('yo')
This raises an error if "generator" is not re-entrable (that is if it
didn't end with yield or one of its sugar).
What is lost is the ability to pass around the send/throw/close/next
functions. I would consider this a win. From what I've seen of
generators, there is no loss. At least, task.js doesn't seem to pass
these functions around.
Since every generator additional methods would be reimplemented with
syntax, I think that having yield/reenter keywords (and additional sugar
for usability), generators wouldn't need to be their own new function type.
But that's in an ideal world, of course.
> </idealworld>
David
More information about the es-discuss
mailing list