3 ms·
yield is not just a statement, it's also an expression Perhaps you could give an example of yield as an expression? "x = x + yield" doesn't make a lot of sense
by ynniv 13y ago
yield is not just a statement, it's also an expression
Perhaps you could give an example of yield as an expression? "x = x + yield" doesn't make a lot of sense to me.
> Reserved words are unnecessary.
I've got no idea why you put that here
The meaning of a symbol can often be inferred from its context - it doesn't need to be a reserved word.
So now ES6 needs to define a new function in the global namespace
No, if the user cares to save the extra characters, they can define a convenience function.
`yield(something)` would also conflict with yielding a value.
Yes, it would not be allowable to have an open paren after yield. Something like a syntax colon ("yield:(x + 1)") or a unary operator ("yield +(x + 1)") would be necessary.
- masklinn 13y ago> Perhaps you could give an example of yield as an expression? "x = x + yield" doesn't make a lot of sense to me. And yet it's perfectly valid. ES6 generators are (shallow) coroutines (or "extended generators" in Python-land[0]). From the outside, they provide a `send()` method as the converse to `next()`, and that method is used to inject a value back in the generator, via `yield` as an expression. And yes you can use the same yield to send a value out and retrieve one in the same "yield step". That is how e.g. taskjs[1] works: spawn(function*() { var data = yield $.ajax(url); $('#result').html(data); var status = $('#status').html('Download complete.'); yield status.fadeIn().promise(); yield sleep(2000); status.fadeOut(); }); the first line sends a promise to the scheduler and suspends the generator, the scheduler then resumes the generator with send() to inject the resolution of the promise back in. > The meaning of a symbol can often be inferred from its context - it doesn't need to be a reserved word. Not without function * . the purpose of function * is precisely to provide the context for `yield` being not-a-name. > Yes, it would not be allowable to have an open paren after yield. You do realize how utterly insane that reads right? You propose crippling `yield` and making it significantly less convenient and sensible to get rid function * (and the colon does not work, it conflicts with labels) [0] http://www.python.org/dev/peps/pep-0342/ http://www.python.org/dev/peps/pep-0342/ [1] http://taskjs.org/ http://taskjs.org/
- ynniv 13y agoES6 generators are (shallow) coroutines This is the first I've heard ES6 generators being coroutines. Is this documented somewhere other than the PEP?
- masklinn 13y agoI'm not sure what you're looking for exactly. The generators proposal defines the `send` method[0] (as well as `throw`) and its semantics. They're not "full" coroutines as they can't yield to an arbitrary coroutine (unless a trampoline is used), only to their parent/caller. [0] http://wiki.ecmascript.org/doku.php?id=harmony:generators#methodnext http://wiki.ecmascript.org/doku.php?id=harmony:generators#me...