Brendan Eich (2014-07-23T18:11:14.000Z)
Andy Wingo wrote:
>> As a matter of design policy we rarely, if ever, just drop exceptions.
>
> I probably didn't explain myself completely; apologies.  I meant that
> the mechanism of iter.return() should be implemented by throwing an
> exception (i.e., as if by "iter.throw(new StopIteration)") instead of
> "returning" from the yield point.

Hi Andy,

You may have missed it, but way back in ES4 days, Igor Bukanov and I 
implemented generators based in large part on Python 2.5 in 
SpiderMonkey. We didn't implement GeneratorExit (the exception thrown by 
close at the generator parked in a yield). Instead, Igor argued here and 
on python-dev in favor of forcing a return, and Phillip J. Eby among 
other Python leaders agreed that was better (and perhaps Python would 
move that way in the future).

https://mail.python.org/pipermail/python-dev/2006-August/068429.html

is the head of the python-dev thread.

https://mail.mozilla.org/pipermail/es-discuss/2006-December/000297.html

is the oldest es-discuss hit I can find quickly.

I think aesthetics are better, but _de gustibus_. Beyond the ugliness of 
implicit throw and a magic singleton per realm to throw, not polluting 
catch clauses in the field with a new exception object seems like a 
substantive win to me, as to Igor, Phillip , et al. People do write 
unguarded catches and make assumptions about what they caught. They 
shouldn't, but they do.

So I see some risk in adding a new exception and built-in throw. The 
risk of catching a return seems strictly much-less-than, at a glance.

/be
domenic at domenicdenicola.com (2014-07-31T18:27:24.456Z)
Andy Wingo wrote:

> I probably didn't explain myself completely; apologies.  I meant that
> the mechanism of `iter.return()` should be implemented by throwing an
> exception (i.e., as if by `iter.throw(new StopIteration)`) instead of
> "returning" from the yield point.

You may have missed it, but way back in ES4 days, Igor Bukanov and I 
implemented generators based in large part on Python 2.5 in 
SpiderMonkey. We didn't implement GeneratorExit (the exception thrown by 
close at the generator parked in a yield). Instead, Igor argued here and 
on python-dev in favor of forcing a return, and Phillip J. Eby among 
other Python leaders agreed that was better (and perhaps Python would 
move that way in the future).

https://mail.python.org/pipermail/python-dev/2006-August/068429.html

is the head of the python-dev thread.

https://mail.mozilla.org/pipermail/es-discuss/2006-December/000297.html

is the oldest es-discuss hit I can find quickly.

I think aesthetics are better, but _de gustibus_. Beyond the ugliness of 
implicit throw and a magic singleton per realm to throw, not polluting 
catch clauses in the field with a new exception object seems like a 
substantive win to me, as to Igor, Phillip , et al. People do write 
unguarded catches and make assumptions about what they caught. They 
shouldn't, but they do.

So I see some risk in adding a new exception and built-in throw. The 
risk of catching a return seems strictly much-less-than, at a glance.