ES6 doesn't need opt-in

Brendan Eich brendan at
Mon Jan 2 22:19:02 PST 2012

[Dave has been traveling, hope it's ok for me to jump in. /be]

On Jan 2, 2012, at 6:07 AM, Andreas Rossberg wrote:

> In other words, I think the main points of your proposal can
> essentially be rephrased to:
> 1) Rename "use version 6" to "use module".
> 2) Allow module declarations in classic mode.

[Replying to (1) and (2) here:]

Not just module declarations -- all new syntax that is not backwards-incompatible: destructuring, rest/spread, for/of ,generators, comprehensions, generator expresions, quasiliterals, more.

> 3) Make every module body start with an implicit "use module".

That's not right: use module; in a pragma turns the enclosing block or body into a module {...}, in a macro-like way. Then if the module {...} is illegal in the given context (i.e., not nested immediately in another module's body), you get the same error you'd get trying to write, e.g.,

 if (cond) { module { /* stuff */ } }

> 4) Keep the semantics of the top-level scope unaltered, even in
> presence of a top-level "use module".

No, see above: that turns the verbatim top level into the ... part of module {...}.

> I'm fine with (1) to (3), but (4) seems to be a separate design choice.

With what I wrote above in mind, what do you think now?


More information about the es-discuss mailing list