ES6 doesn't need opt-in

Allen Wirfs-Brock allen at wirfs-brock.com
Thu Jan 5 22:13:30 PST 2012


On Jan 5, 2012, at 8:24 PM, Mark S. Miller wrote:

> Hi Allen, if ES5 had only one mode, I'd understand this. But I thought we were trying to arrive at two modes, ES6 non-strict, to be backwards compat with ES5-non-strict, and ES6 strict, to be backwards compat with ES5-strict. I am perfectly happy to call ES6 non-strict "ES3", since ES5-non-strict really exists to be an ES3 compatibility mode, and was constrained to be backwards compatible from ES3. Likewise, I am happy to call the new ES6 strict simply "ES6".
> 
When I talked about "ES5" in my original post I meant full ES5 including both strict and non-strict modes.  Since ES6 is supposed to be a strict super set of ES5 strict mode, anything in the ES5-only category must be an exclusively non-strict mode feature (for example, with).  I suppose you could call that category "ES3" but I decided to label it "ES5-only"  to keep things focused on differences between ES5 and ES5.

> Concretely, I am confused how your transition diagram is supposed to handle "use strict";. Reading your state machine literally, since "use strict"; is accepted by ES5, if it is accepted by ES6 (as I think we all agree it would be), then it would leave us in state ES5&ES6. Were you two base categories "ES6 non-strict" (or ES3) and "ES6 strict" (or ES6), then a "use strict"; would put us in your ES6 strict (or ES6) category, which is what I would have expected.

Yes, "use strict" is in the ES5&ES6 category.  A ES5 completely strict mode program would start in State 5&6  and stay in that state for its entire "compilation".  Only encountering use of a new ES6 feature would case a transition to State ES6.  Looking at it another way, Both State ES5 and State 5&6 include support for both strict and non-strict ES5 code.  State ES6 only allows strict code.

Allen
> 
> 
> On Thu, Jan 5, 2012 at 6:37 PM, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
> Here is a possible set of rules for implicitly assigning ES5 or ES6 semantics to a Program unit
> 
> In an "ES6" implementation, all constructs that can occur in a valid program fit into one of these categories:
> ES6-only:  The construct is based upon syntax or static semantics rules that only exist in ES6.  For example, a destructuring pattern
> ES5-only:  The construct is based upon syntax that or static semantics rules that that are not in ES6. For example, use of a with statement t.
> ES5&ES6:  The construct has identical semantics in both ES5 and ES6.
> ES5~EAS6:  The construct has identical syntax and static semantics in both ES5 and ES6, but differing semantics.  For example, accessing a formal parameter after an assignment to the corresponding element of the function's arguments object.
> 
> We can then use the following state machines to describes the processing of a Program based upon the occurrence for these feature categories.  Initially start in State 5&6:
> 
> State 5&6
>     if current construct is in ES5&ES6, process using intersection semantics, then goto State 5&6
>     if current construct is in ES5~ES6, process using ES5 semantics then, goto State Compat5
>     if current construct is in ES5-only, process using ES5 semantics then goto  State ES5
>     if current construct is in ES6-only, process using ES6 semantics then goto State ES6
> 
> State ES5
>     if current construct is in ES5&ES6, process using intersection semantics, then goto State ES5
>     if current construct is in ES5~ES6, process using ES5 semantics, then goto State ES5
>     if current construct is in ES5-only, process using ES5 semantics then goto  State ES5
>     if current construct is in ES6-only, terminate with Error: invalid combination of ES5 and ES6 features
> 
> State ES6
>     if current construct is in ES5&ES6, process using intersection semantics, then goto State ES6
>     if current construct is in ES5~ES6, process using ES6 semantics, then goto State ES6
>     if current construct is in ES5-only, terminate with Error: invalid combination of ES5 and ES6 features
>     if current construct is in ES6-only, process using ES6 semantics then goto  State ES6
> 
> State Compat5  (or have an analogous Compat6 state, and restart to State ES5 when necessary)
>     if current construct is in ES5&ES6, process using intersection semantics, then goto State Compat5
>     if current construct is in ES5~ES6, process using ES5 semantics then, goto State Compat5
>     if current construct is in ES5-only, process using ES5 semantics then goto  State ES5
>     if current construct is in ES6-only, abort current compilation and restart from beginning, starting in State ES6
> 
> Basically using any ES6 features makes it an ES6 program.  Using any ES5-only feature makes it an ES5 program.
> Combining ES5-only and ES6 features results in an invalid program.
> If a Program can not be explicitly identified as either ES5 or ES6, it is treated as an ES5 program.
> 
> If you want to explicitly force ES6 processing put a:
>   let ES6;
> at the top of the source file.
> 
> If you want to explicitly force ES5 processing put a:
>   with (5);
> at the top of the source file
> 
> Allen
> 
> 
> 
> 
> 
> -- 
>     Cheers,
>     --MarkM

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120105/93b148a5/attachment.html>


More information about the es-discuss mailing list