Close review of Language Overview whitepaper

Brendan Eich brendan at mozilla.org
Thu Nov 15 09:48:31 PST 2007


On Nov 14, 2007, at 5:34 PM, Brendan Eich wrote:

>> Things I didn't see:
>>
>> What about standardizing the de facto <!-- comment syntax that is
>> necessary for web compatibility?
>
> Please write the spec ;-). Don't forget the --> mess.

We did talk about this at some point. I'm not sure everyone is aware  
of this web compatibility constraint, so I'll describe it briefly and  
incompletely.

When I embedded JS in HTML in 1995, I had a backward compatibility  
problem: Netscape 1.x and every other browser would see the inline  
script tag's content, as marked up text. So I took advantage of a  
content model that HTML-as-it-is inherited from SGML, CDATA, and made  
the script tag's content model be CDATA. This means that < does not  
need to be spelled &lt; -- thank goodness -- but it also allows SGML  
comments (or the approximation of them supported by HTML browsers) to  
wrap the entire inline content of <script>:

<script>
<!-- hide from old browsers
for (i = 0; i < N; i++) do_stuff(i);
// -->
</script>

This two-way comment hiding hack works because JS in browsers (not  
necessarily in other embeddings, see below) treats <!-- as the  
starting delimiter of a comment till end of line. I required  
programmers to use a JS one-line comment to hide the closing -->.

Unfortunately, and I'm going from memory so this may be off slightly,  
IE at least does not require --> to be commented in JS. This is bad  
in general since --> looks like post-decrement immediately followed  
by greater-than. There's a heuristic that insists on only leading  
horizontal whitespace on the line before the -->, and (I may have  
this part wrong in particular) nothing after the --> but whitespace.

Postel's Law bites back, so of course by the Web's law of copy and  
paste programming (cut and paste, actually), you find <!-- in the  
middle of .js files included via <script src="foo.js">. These must be  
treated by JS as comment to end of line initiators.

This ends my tale of woe, except that I think embeddings on DVDs and  
in firmware that do not see web script should not have to deal with  
this nonsense. So I'm not sure a spec for this de-facto web standard  
is appropriate in ES4 or any normative core language spec. Of course,  
the copy/paste argument applies across embedding domains, but not so  
much. What do you think?

/be




More information about the Es4-discuss mailing list