Generators (in similar manner and for similar reasons as in PEP-380) can return a value via a `return` statement. This requires a pair {value, done}, you cannot do it with a sentinel such as your item (3).

BTW at ECOOP in Prague this past week, I heard from folks (I forget whether it was Till Schneiderheit or Andy Wingo) that the object-per-iteration cost avoidance optimizations are about to land in one of the top engines.

/be

David Bonnet wrote:
Sorry for bringing this up again, especially now that the specification has 
been finalised. However, I can’t really understand the rationale behind the 
design of `Iterator.next()`.

There are at least three possible options for the behaviour of 
`Iterator.next()`:
1. Returning a value and throwing `StopIteration` when done.
2. Returning {value, done} object with `done = true` when done.
3. Returning a value and returning `Symbol.iterationDone` when done.

I understand that option 1 would require trapping the exception.

Option 2 would require creating an object at each call, which as discussed in 
this thread, would require non-trivial optimisations.

Option 3, however, seems IMHO to have no caveats, and would require adding 
another symbol (`Symbol.iterationDone`) along with `Symbol.iterator`.

So why was option 2 chosen? Why not option 3? All I could find is a discussion 
that still refers option 1:
http://wiki.ecmascript.org/doku.php?id=harmony:iterators

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

Reply via email to