Re: sequence and iterables

On Fri, Nov 15, 2013 at 6:23 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> On 11/15/13 9:17 PM, Jonas Sicking wrote:
> The typical way one would use an iterable is something like this:
>
>   function f(iterable) {
>     for (value of iterable) {
>       doStuff(value);
>     }
>   }
>
> whereas the snapshotting approach is more like:
>
>   function f(iterable) {
>     var snapshot = Array.from(iterable);
>     for (value of snapshot) {
>       doStuff(value);
>     }
>   }
>
> which is slightly odd to do as the default thing with iterables...

These two are only distinguishable from outside of 'f' if doStuff
synchronously calls back into "external code". I agree that for APIs
that does, we need to define if 'f' iterates a snapshot or the
iterator directly.

There are several APIs in ES5/ES6 which does do this. Array.map would
be an obvious example. And for those APIs I believe they explicitly
define that no snapshotting happens.

However in the DOM I think we have very few APIs that synchronously
call back out to external code while using an array-like. The Gecko
implementation of MutationEvents used to do this and that was a royal
pain to implement. It was also a royal pain to use.

In general I think we should try to avoid such callbacks, except in
very explicit APIs like Array.map. However I can't think of any
examples in the DOM.

/ Jonas

Received on Saturday, 16 November 2013 02:33:09 UTC