On Thu, Oct 14, 2010 at 8:29 AM, Brendan Eich <span dir="ltr">&lt;<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Oct 14, 2010, at 8:12 AM, Mark S. Miller wrote:<br>
<br>
&gt; On Wed, Oct 13, 2010 at 5:35 PM, Brendan Eich &lt;<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>&gt; wrote:<br>
&gt; On Oct 13, 2010, at 4:31 PM, Mark S. Miller wrote:<br>
&gt;<br>
&gt;&gt; Recently, I met with the Google V8 team for two full days. One message that came through loud and clear, that I said I would relay to the list, is &quot;please, no more modes.&quot;<br>
&gt;<br>
&gt; If this is an attempt to avoid &lt;script type=&quot;harmony&quot;&gt; (harmony a placeholder for something more RFC4329-conformant), it&#39;s not going to work.<br>
&gt;<br>
&gt; Declaring what the conclusions of discussions must be is not helpful. I am raising an issue. Let&#39;s discuss it.<br>
<br>
</div>The shoe seems to be on the other foot, to be blunt. You knew about <a href="http://wiki.ecmascript.org/doku.php?id=strawman:versioning" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:versioning</a> and previous work -- did you raise the issue? It seems you met for two days with V8 folks and came back with &quot;no more modes&quot;, ignoring the work we&#39;d done in TC39 on exactly why opt-in versioning seems required, and how it might work. That is less than helpful.<br>

<br>
Sorry for being grumpy,</blockquote><div><br></div><div>Apology will be accepted once you stop being so grumpy ;). I really am surprised by your tone here. I did not raise this issue before because I do not feel strongly about this issue. I also had never had a multi-day meeting with the V8 folks before. In the previous meetings and conversations we&#39;ve had, they never communicated this objection to me. During that recent two day meeting, they did convey this objection, emphatically. This was new information for me. Now it is new information for you. Can we please calm down now?</div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> but wishing away modes or versioning won&#39;t cut it, here or for WebSockets or other new stuff. The Web has not always evolved backward-compatibly, nor can it always -- nor should it, since old forms die off and new forms are needed to prevent stagnation -- wherefore ES5 and its incompatible changes, just like ES3, ES2, and JS itself before them.<br>

<br>
Wishing, assuming, or stipulating that the Web must stop changing incompatible under opt-in versioning therefore simply begs the question of why things are different this time. Assuming we can be modeless when we&#39;re adding new syntax contradicts 15 years of direct experience. It&#39;s true we had a &quot;versionless&quot; era since ES3 was finalized, sort of: you have to ignore all the<br>

<br>
  if (document.all {<br>
    // IE code here, no getters/setters, no Array extras<br>
  } else {<br>
    // for the last four years or more, getters/setters, etc.<br>
  }<br>
<br>
versioning code.<br>
<br>
Versioning happens. Object detection, a la document.all testing (or better, this.JSON testing in global code) is arguably best, although not without pitfalls.<br>
<br>
The worst thing we could do is force developers to user-agent sniff. But that seems where &quot;no more modes&quot; is headed, because content authors cannot afford to send syntax errors with no fallback automation to downrev browsers.<br>

<div class="im"><br>
<br>
&gt; Given &lt;script type=&quot;harmony&quot;&gt; as an opt-in, I&#39;m puzzled about how it would work anyway. Since it is per script, not per frame, presumably<br>
&gt;<br>
&gt; &lt;script type=&quot;harmony&quot;&gt;&quot;use strict&quot;; var e1 = eval;&lt;/script&gt;<br>
&gt; &lt;script&gt;&quot;use strict&quot;; var e2 = eval;&lt;/script&gt;<br>
&gt; &lt;script ...&gt;&quot;use strict&quot;; e1 === e2 /*results in true*/ &lt;/script&gt;<br>
&gt;<br>
&gt; In other words, that both harmony and non harmony code on the same page have the same binding for the global &quot;eval&quot; function. In that case, what does the following code do:<br>
&gt;<br>
&gt;     e2(&#39; &quot;use strict&quot;; var module = 8;&#39;);<br>
&gt;<br>
&gt; This is currently legal es5/strict code. As suggested by the modules strawman, it is not legal harmony code. es5/strict and harmony share a heap. I do not see a good answer.<br>
<br>
</div>First, whatever the answer here, the overriding motivation for opt-in versioning remains. You can solve this a number of ways. The front-runner, which came out at the last TC39 meeting and was a surprise to me, is to make all Harmony scripts use lexical scope, not the global object. Doing so avoids this problem by making e1 not visible to non-Harmony scripts, because it is not a property of the global object.<br>

<br>
Of course e2 would be a global property, so the question remains: if Harmony script can get at the global object, it can invoke e2 as an indirect eval. But the answer then to the question &quot;what version is this indirect eval using to compile with?&quot; must be pre-Harmony.<br>

<br>
Indeed, we implemented this when we added &#39;let&#39; and &#39;yield&#39; keywords under opt-in versioning in JS1.7. ES5 strict reserves these under the &quot;use strict&quot; opt in. From ES5 10.1.1:<br>
<br>
* Eval code is strict eval code if it begins with a Directive Prologue that contains a Use Strict Directive or if the call to eval is a direct call (see 15.1.2.1.1) to the eval function that is contained in strict mode code.<br>

<br>
Thus there is already one bit of opt-in versioning state in ES5, which must be carried from direct eval&#39;s caller to callee. But indirect eval is non-strict without a &quot;use strict&quot;; in the eval&#39;ed source string.<br>

<br>
This strongly suggests doing the same for another bit of opt-in versioning, to the Harmony version.<br>
<br>
Again, this is all a sideshow to the main issues I (re-)raised. It needs to be resolved but it does not remove the overriding reason for opt-in versioning: new syntax and semantics (lexical global scope), not merely new keywords. I&#39;d like to hear those addressed.<br>

<font color="#888888"><br>
/be</font></blockquote></div><br><br clear="all"><br>-- <br>    Cheers,<br>    --MarkM<br>