> Given <script type="harmony"> as an opt-in, I'm puzzled about how it would 
> work anyway. Since it is per script, not per frame, presumably
> 
> <script type="harmony">"use strict"; var e1 = eval;</script>
> <script>"use strict"; var e2 = eval;</script>
> <script ...>"use strict"; e1 === e2 /*results in true*/ </script>

That's not quite right, at least according to the simple modules design. But 
it's my fault for not spelling it out clearly enough in the strawman. In 
particular:

- Harmony scripts would not have the legacy global object as a record in their 
scope chain
- Harmony eval retains the same value and behavior as ES5-strict eval, i.e., it 
evaluates its code as legacy code, not as Harmony code.

Both of these are open to discussion, of course, but I offer them at least as 
counter-evidence to your implication that there's no answer to the versioning 
question other than eliminating modes.

The invariants of Harmony do *not* rely on not interacting with legacy code. 
You still get lexical scope, and ES5-strict eval is sufficient for that 
purpose. (When you run eval, of course, you're running code in a language that 
doesn't have full lexical scope.)

> In other words, that both harmony and non harmony code on the same page have 
> the same binding for the global "eval" function. In that case, what does the 
> following code do:
> 
>     e2(' "use strict"; var module = 8;');
> 
> This is currently legal es5/strict code. As suggested by the modules 
> strawman, it is not legal harmony code.

It's perfectly legal. It's an indirect eval, regardless of whether it's being 
called from ES5-strict or Harmony.

> es5/strict and harmony share a heap.

Yep, and that's fine.

> I do not see a good answer.

As you say, that's why it's worth discussing.

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to