On Nov 26, 2012, at 5:27 PM, Brendan Eich wrote:

> David Bruant wrote:
>> Le 26/11/2012 22:11, Brendan Eich a écrit :
>>> Herby Vojčík wrote:
>>>> Hi,
>>>> 
>>>> shouldn't StopIteration, ForwardToTarget from "Notification proxies" 
>>>> thread and similar ones be rather well-known unique symbols (like 
>>>> @iterator), now that we have them, instead of well-known globals? \
>>> 
>>> Why?
>>> 
>>> Let's separate the naming and unique identity concerns. Objects have unique 
>>> identity, so do symbols. But if a unique identity is required without being 
>>> a property key, then an object is the right answer, not a symbol.
>> I'm not sure not being a property key is that big of a constraint, so I 
>> would say that objects and symbols are both valid equally valid.
> 
> Perhaps not, but it's odd to make a symbol just for (e.g.) immutability with 
> no properties or [[Prototype]]. For realm-independence is more interesting. 
> More below, on your good point I had forgotten momentarily in replying to 
> Allen a minute ago.
> 
>>> I think this applies to StopIteration.
>> It is suggested on the strawman that StopIteration be a constructor [1] and 
>> I support this idea for StopIteration because an iterator may have different 
>> reasons to stop and building instances with a message (or any property) 
>> attached.
> 
> Yes, indeed, and StopIteration as constructor is used implicitly when a 
> generator function returns a value. This makes the case for object not 
> symbol. isStopIteration copes with realm-dependence.
> 

There would be another way to accomplish supporting generator return values 
that doesn't require dynamically constructing new StopIteration instances and 
avoids all Realm issues:  Capture the return value in the generator instance 
when it enters the "closed" state and then throw the single immutable 
StopIteration object (could be a Symbol).  A client of the generator instance 
that catches StopIteration and expects a return value can directly query the 
generator instance (via a property access) to get that return value.  It 
accomplishes the same thing but doesn't require multiple StopIteration 
instances, an extract allocation on generator returns, a call to 
isStopIteration to test, etc.


Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to