lexical for-in/for-of loose end

Brendan Eich brendan at mozilla.org
Mon Feb 6 07:37:34 PST 2012

Andreas Rossberg wrote:
> On 4 February 2012 18:49, Brendan Eich<brendan at mozilla.org>  wrote:
> In other words, why isn't the following good enough?
> {
>   let d1 = e1, ..., dN = eN;
>   const $loop = {|d1, ..., dN|
>     if (cond) {
>       body
>       update;
>       $loop(d1, ..., dN);
>     }
>   }
>   $loop(d1, ..., dN);
> }

This is the "0th iteration scope" idea. It's good enough if (a) we want 
skip2 (see last post) affecting no iteration's loop variables, and (b) 
we can take the extra scope cost-hit.

> FWIW, this is simply the generalization of Mark's desugaring so that
> it works with destructuring, multiple bindings, and recursive
> bindings. Plus, it removes the redundant second lambda in his version.

It's fine if we like (a) on usability grounds, and (b) is true for all 
implementors and wtf-benchmarketing kooks.

I argued vigorously for 1st-iteration rather than 0th-iteration scope 
but that was to say "no" to (b). I'm actually not sure what skip2-coding 
authors will want -- probably an error as Allen suggests. But let's say 
yes to (a) -- I can live with (b) absent further evidence.

The issue remains (a). Allen's best shot is the skip2 scenario (advance 
in his post). What's the right outcome for users who write such code?


More information about the es-discuss mailing list