[+commonjs] (And note subject change) By "ES5 allows one to enumerate all properties on primordial objects except the global (window) object", I do not mean to imply that ES5 does not allow one to enumerate all properties of the global object. ES5 does allow this. I am only suggesting a procedure that does not do so.
On Fri, Dec 4, 2009 at 9:38 AM, Mark S. Miller <[email protected]> wrote: > On Fri, Dec 4, 2009 at 8:41 AM, Alex Russell <[email protected]> wrote: >> CommonJS modules don't solve the global pollution problem, because they >> can't. We're gonna keep blowing off limbs until we acknowledge that there's >> a design flaw in the language and take some positive action at a semantic >> level to correct it. > > ES5 allows one to enumerate all properties on primordial objects > except the global (window) object, to attempt to delete all properties > that are absent from a whitelist or die trying, and then to attempt > freeze all these cleaned up primordials (including all objects > reachable by traversal of remaining properties) or die trying. If both > of these succeed... > > ES5-strict enables to do a fully static scope analysis. Say one builds > a static verifier for Program text that does nothing but reject text > that either 1) is not a valid ES5-strict program unit, 2) has free > variables, or 3) uses a direct eval operator. A "closed function" is a > function that has no free variables. The natural rewrite of a module > is as the body of a closed function, perhaps packaged in a larger > closed expression or Program that would pass the above verifier. > Because ES5-strict is statically scoped, such a verifier effectively > removes the global object from the bottom of the scope chain of > Programs that pass this verifier. > > Given that primordials (other than the global object) are transitively > frozen and that the above whitelist was adequately restrictive, each > call of a closed function is fully isolated -- its connectivity to the > world outside itself is fully under control of its caller. If the > module-function's caller denies access to the global object, the > indirect eval function, and to the Function constructor, then the > module cannot pollute non-local state. > > -- > Cheers, > --MarkM > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > -- Text by me above is hereby placed in the public domain Cheers, --MarkM _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

