Let's not go in circles -- the primary reason for function* is because yield is not reserved in JS and is used by web content as a plain identifier. It is a low-precedence unary prefix operator, so cannot be contextually reserved by a grammatical restriction as "module" can. It needs opt-in syntax.

Separately, some on TC39 want a flag on the function, in the head syntax, to alert readers to the generator. That's a secondary reason, independent and not as strong in my view.

There's nothing to "get" or "not get" about backward compatbility. It just "is". :-|

/be

Yuichi Nishiwaki <mailto:yuichi.nishiw...@gmail.com>
August 31, 2013 12:55 PM
I can't get the point, why you need to know if the function is a
generator or not at a glance?

1. Forcing users to mark the function as a generator is only a
duplication. It basically doesn't have any meaning other than
double-checking, and fundamental risk for the unintentional creation
is still not removed.
2. Even if you know the function is a generator in early, you still
need to read the entire source code to get the information about what
the generator yields and when it stops.
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Oliver Hunt <mailto:oli...@apple.com>
August 31, 2013 12:25 PM
On Aug 31, 2013, at 12:15 PM, Yuichi Nishiwaki<yuichi.nishiw...@gmail.com>  
wrote:

Hi all, I just found a post that the current generator syntax
(function *) seems have decided in:

https://mail.mozilla.org/pipermail/es-discuss/2011-July/015799.html

According to the post, the biggest reason the star syntax is adopted
for now is that you cannot write empty generators with star-less
functions in a consistent simple way. But the situation has changed,
and in the current spec (rev 17) yield* is now capable of taking any
kind of iterator, so you can make empty generators just like

```js
function * () {
    yield * [];
}
```

This looks enough good and simple at least to me. And I wonder if even
now generators still need to be declared with 'star's. What are the
advantages of 'star'ed generators rather than 'star'-lesses? If not
exist, shouldn't it be removed (for the simplicity)?


The reason for the * is substantially (IIRC) to make it possible for an engine
to help prevent developers from unintentionally creating a generator function,
and to make it possible for someone attempting to use a function to identify 
immediately
whether it is a generator or a regular function.

--Oliver

Thank you.

--
Yuichi Nishiwaki
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Yuichi Nishiwaki <mailto:yuichi.nishiw...@gmail.com>
August 31, 2013 12:15 PM
Hi all, I just found a post that the current generator syntax
(function *) seems have decided in:

https://mail.mozilla.org/pipermail/es-discuss/2011-July/015799.html

According to the post, the biggest reason the star syntax is adopted
for now is that you cannot write empty generators with star-less
functions in a consistent simple way. But the situation has changed,
and in the current spec (rev 17) yield* is now capable of taking any
kind of iterator, so you can make empty generators just like

```js
function * () {
yield * [];
}
```

This looks enough good and simple at least to me. And I wonder if even
now generators still need to be declared with 'star's. What are the
advantages of 'star'ed generators rather than 'star'-lesses? If not
exist, shouldn't it be removed (for the simplicity)?

Thank you.

--
Yuichi Nishiwaki
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to