Goals:
   Duplicate current browser global semantics
         Existing ES5 built-ins are properties of "the global object"
         Global Function and Var declarations create properties of the global 
object
         Ad hoc semantics relating explicit Function/Var global bindings and 
non-declared global object properties include attribute and inheritance issues
    Don't  make the web compatible global object worse
         New declaration forms (let/const/class) shouldn't pollute the global 
object
         Don't add any new ES built-in bindings to the global object
    Don't force non-browser or nested ECMAScript global environment hosts to 
duplicate quirky browser global semantics

Basic Approach
    Define a global environment model that is flexible enough to both maintain 
compat. with existing browser semantics and allow simpler non-browser global 
semantics

Three sub-environment of the global environment record:
      Built-ins: declarative environment record , immutable bindings for 
standard and impl defined built-in globals
      Global Object: A Object environment record, that shadows the built-ins.  
Content is host defined and may replicate global bindings for globals
      Top Lex: A declarative environment record that shadows the Global Object 
environment for lexical bindings created by top level declarations

These sub-environments are hidden behind the environment record interface of a 
single global environment record, hence their existence does not impact the 
rest of the specification.
When a global environment is initialized it can be configured so var and 
function declaration bindings go into  either the Global Object environment or 
the  Top Lex environment

The structuring of Top Lex to support declarations from multiple program/script 
fragments is an orthogonal issue.  However, I favor a single top lex shared by 
all program/script fragments.

Common ways to configure the global environment:

   Browser compat:
       ES5 built-in global bindings replicated on the global object
       any new ES6 built-in global bindings are not replicated on the global 
object
       global var/function declarations create bindings on global object 
environment
       global const/let/class/module declarations create bindings in Top Lex
       This would be specified in the browser specific optional/normative annex.

   Clean Global Object
        No built-ins replicated on global object
        all ES top level declarations (including var/function) create binding 
in Top Lex
        global object properties are only be created via explicit reference to 
global this

    No Global Object
       Global object is undefined
       all ES top level declarations (including var/function) create binding in 
Top Lex


Thoughts?  I'm ready to write the spec for this.

Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to