Andreas Rossberg wrote:
On 3 September 2015 at 01:58, Brendan Eich <bren...@mozilla.org
<mailto:bren...@mozilla.org>> wrote:
I was there, I just re-read and re-remembered. I do not agree with
Allen that some tiny needle was uniquely threaded. Rather, an
aesthetic preference for the new ES6 binding forms to have a
lexical contour of their own when used at top level prevailed.
This leads to problems, not all of which were known at the time --
but some problems were noted.
The REPL problem, where let z=z; makes a poison pill, could be
coped with by ad-hoc REPL deviations from the spec -- at some
cost. Let's set it aside.
The one-time change to a reference, from global object to lexical
shadowing binding, is a serious flaw. Yes, it could happen due to
explicit scope nesting, but the global scope is apparently
uniform. There's no explicit delimiter.
I still maintain that a tower-of-nested-scopes model would have been
cleaner AND would have avoided both the shadowing issue and the REPL
restriction. A mutable scope that gets extended under your feet is
terrible, lexical or not.
I don't remember you overcoming the counterarguments about async scripts
and event handlers in async-generated/written markup twisting the nested
scopes unexpectedly.
I also maintain that putting lexical bindings onto the global object
is not an option. It is incompatible with having a TDZ, unless one
wants to introduce TDZs for properties into the object model,
Nope!
which I doubt anybody wants. Or unless one makes toplevel binding
semantics completely different (and insane), which I also hope nobody
wants (though I'm not so sure).
Something has to give. This seems least bad.
The implementors seem to be rebelling but I'm not trying to stir
up trouble. It would help if V8 did support let, etc. in sloppy
mode. Then we might see open rebellion among two or more implementors.
AFAICS this issue is completely orthogonal to sloppy-vs-script, and
there are no new effects specific to sloppy mode. V8 already fully
implements the necessary semantics. It wasn't pretty, but there are
uglier things in ES6.
There's still user not implementor feedback to be gained by V8
supporting top-level let/const/class in sloppy mode per spec, but fair
enough.
The main thing holding back sloppy let in V8 right now is the parsing
nonsense and extra look-ahead required, which turns out to be a major
pain for us (and FWIW, slows down the V8 parser by a couple of percent
with little hope for recovery :( ).
I thought we resolved this (non-simple parameter list in function makes
"use strict"; directive prologue an early error). What's left?
/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss