Proposal to simplify Generators impact

Lucio Tato luciotato at gmail.com
Sat Oct 26 16:59:39 PDT 2013


Rick: I understand. But it is always a trade-off.

If the reason to introduce a new construct is because there may already be
code that defines a function called `yield`, it seems to me as a bad
trade-off. (advantages vs disadvantages)

In your example...
function yield() {... <- will raise a parsing error.

Anyway, there are other ways to solve that.
You can put the asterisk in "yield" instead of the important "function".
It's a lot less confusing.

function fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield*(curr);
    }
}




On Sat, Oct 26, 2013 at 4:08 PM, Rick Waldron <waldron.rick at gmail.com>wrote:

>
>
>
> On Sat, Oct 26, 2013 at 1:01 PM, Lucio Tato <luciotato at gmail.com> wrote:
>
>> It's really needed to make js syntax more complex in order to implement
>> generators?
>> It's function* really needed?
>>
> Yes, because `yield` is only reserved in strict mode code, which means
> this is valid today:
>
>   function g() { yield = 1; return yield; }
>
> Since the starred generator function is a new syntactic form, there is no
> existing code that it can possibly break by making yield a keyword.
>
>
>
>> can you just expose "Generator" as a core function?
>> can "yield" be a function-call-like-construct instead of a new language
>> construction?
>>
>
> No, because there may already be code that defines a function called
> `yield`, which would be broken if suddenly yield was a special
> language-owned function. Consider this:
>
>   // your code defines this...
>   function yield() { return Number.MAX_VALUE; }
>
>   // you then include my library, which exposes this fibonacci():
>
>  function fibonacci() {
>>     let [prev, curr] = [0, 1];
>>     for (;;) {
>>         [prev, curr] = [curr, prev + curr];
>>         yield(curr);
>>     }}
>>
>>
> What does yield() do? It returns Number.MAX_VALUE every time.
>
>
> Rick
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20131026/4c72992e/attachment.html>


More information about the es-discuss mailing list