On Sat, Jul 24, 2010 at 11:46 PM, 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 Jul 24, 2010, at 11:30 PM, Mark S. Miller wrote:<br>
<br>
&gt; From: Brendan Eich &lt;<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>&gt;<br>
</div><div class="im">&gt; I see three tenable alternatives:<br>
&gt;<br>
&gt; A. Remove ASI in some opt-in version, in full -- no error correction, no restricted productions.<br>
&gt;<br>
&gt; This seems best to me. I would have no objection to keeping the second bullet of ASI rule #1. I may even advocate keeping it; I&#39;m not sure yet. However, the first bullet of rule #1 is a terrible hazard.<br>
<br>
</div>Can you say more? It&#39;s hazardous because &quot;X, Y, and Z&quot; -- three concrete examples.<br>
<br>
The hazard I see, which Garrett Smith mailed me about just now, is the one I already identified as &quot;the mistaken expectation of ASI&quot; -- the case where there&#39;s no syntax error for ASI to correct:<br>
<br>
var MyWidget = function(){<br>
 <a href="http://this.name" target="_blank">this.name</a> = &quot;mike&quot;;<br>
}<br>
/**<br>
  * Initialize Widget<br>
  */<br>
(function() {<br>
  /*...*/<br>
});<br>
<br>
(from <a href="http://jibbering.com/faq/notes/code-guidelines/asi.html" target="_blank">http://jibbering.com/faq/notes/code-guidelines/asi.html</a>).<br>
<br>
This is simply a failure to use a semicolon where it is needed.<br>
<br>
Removing ASI won&#39;t make this hazard go away unless (eventually, and in statistically significant numbers) developers stop &quot;counting&quot; on such magical &quot;DWIM&quot; ASI, and become more careful. But that is farfetched, since it&#39;s pretty easy to make this mistake even if one assiduously inserts semicolons manually.<br>
</blockquote><div><br></div><div>This is a perfect example, and I agree with most of your analysis of it, but not with your conclusion.</div><div><br></div><div>&lt;detail&gt;</div><div>A slightly better example is</div><div>
<br></div><div>    obj.widget = function(){</div><div>      <a href="http://this.name">this.name</a> = &quot;mike&quot;;</div><div>    }</div><div><br></div><div>since the first one can be easily avoid by using function declarations where they&#39;re appropriate.</div>
<div>&lt;/detail&gt;</div><div><br></div><div>The problem is that as long as ASI exists, one will often see working code such as this, since it does usually work. This training of the eye is a kind of habituation, and in this case it is insidious because it desensitizes the programmer from a pattern that <b>should</b> look malformed but doesn&#39;t. In the absence of ASI, such code would never normally appear in running code. When it does appear in running code, that should alert the programmer that their program violates their intention and needs to be fixed.</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;">
<div class="im"><br>
<br>
&gt; Yes! Data! Bring it on!<br>
<br>
</div>That&#39;s your job :-P. I don&#39;t have access to the Google copy of the web, or sawzall.<br>
<font color="#888888"><br>
/be<br>
<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>    Cheers,<br>    --MarkM<br>