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 <[email protected]>wrote:
>
>
>
> On Sat, Oct 26, 2013 at 1:01 PM, Lucio Tato <[email protected]> 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
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss