Standard @iter module unfriendly to collection builders

Allen Wirfs-Brock allen at wirfs-brock.com
Mon Nov 14 09:07:39 PST 2011


On Nov 12, 2011, at 12:05 PM, Brendan Eich wrote:

> On Nov 12, 2011, at 11:26 AM, Allen Wirfs-Brock wrote:
> 
>> The Iterators proposal includes the definition (http://wiki.ecmascript.org/doku.php?id=harmony:iterators#standard_api ) of functions that are intended to support various common iteration patterns.
>> 
>> For example,   
>> 
>>   for ((k of keys(x)) { ...}
>>   for (v of values(x)) { ...}
>>   for ([k,v] of items(x)) {...}
>>   for (k of allKeys(x)) { ...}
>>   for (k of allValues(x)) { ...}
>>   for (i of allItems(x)) { ...}
>> 
>> The use of these functions seems to be pretty much an essential part of the intended use of the for-of statement.
> 
> The prior question is what, if anything,
> 
>   for (x of y) ... // and [x for x of y], etc.
> 
> means.
> 
> Should it throw if there's no @iterator private-named property in y *and* y is not a Proxy with an iterate trap? That is our current thinking. It may not be reflected well in the wiki.

Another possibility would be to build in default @iterator methods on Object.prototype and Array.prototype.  I'd probably make the object implementation be an items for enumerable properties and the array implementation iterate the values of 0..length-1 .
> 
> The alternative is to iterate over property values of an object denoted y that has no unstratified @iterator or stratified handler iterate trap. But that is hostile to collections and your [] proposal.

Property values (without key identification) doesn't sounds that generally useful. 

> 
> OTOH I see no problem for collection writers if we make for-of throw on untrapped objects. Collection authors would bind @iterator, @elementGet, and @elementSet. Life would be grand. Right?

Yes,  suspect that people defining collections would routinely want to over-ride @iterator.  However, the defaults probably do establish some expectations.  Particularly if we aren't providing many (any?) built-in collections  that might establish other expectations.

allen

> 
> /be

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20111114/6b7fcf23/attachment.html>


More information about the es-discuss mailing list