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".

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.


On Thu, Jan 5, 2012 at 6:37 PM, Allen Wirfs-Brock <al...@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
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to