return when desugaring to closures
Brendan Eich
brendan at mozilla.com
Mon Oct 13 17:21:19 PDT 2008
On Oct 13, 2008, at 4:54 PM, Waldemar Horwat wrote:
> I am talking about let bindings. Lars brought up at that meeting.
> I did not find the use cases particularly convincing, but the dead
> zone is compelling. There are four ways to do this:
> A1. Lexical dead zone. References textually prior to a definition
> in the same block are an error.
> A2. Lexical window. References textually prior to a definition in
> the same block go to outer scope.
> B1. Temporal dead zone. References temporally prior to a definition
> in the same block are an error.
> B2. Temporal window. References temporally prior to a definition in
> the same block go to outer scope.
>
> Let's take a look at an example:
>
> let x = "outer";
> function g() {return "outer"}
>
> {
> g();
> function f() { ... x ... g ... g() ... }
> f();
> var t = some_runtime_type;
> const x:t = "inner";
> function g() { ... x ... }
> g();
> f();
> }
>
> B2 is bad because then the x inside g would sometimes refer to
> "outer" and sometimes to "inner".
>
> A1 and A2 introduce extra complexity but doesn't solve the problem.
> You'd need to come up with a value for x to use in the very first
> call to g(). Furthermore, for A2 whether the window occurred or not
> would also depend on whether something was a function or not; users
> would be surprised that x shows through the window inside f but g
> doesn't.
>
> That leaves B1, which matches the semantic model (we need to avoid
> referencing variables before we know their types and before we know
> the values of constants).
Agreed, this is compelling, it shows the insufficiency of lexical order.
I missed this somehow (where are those meeting minutes? Still being
vetted by TC39?). Thanks for restating it.
/be
More information about the Es-discuss
mailing list