There are multiple levels of opt-in versioning:

(1) versioning of the language itself

(2) language support for versioning of libraries

I agree with what you're saying wrt (1), but wrt (2), feature detection is 
feasible, and I'd think more tractable than version detection.

Dave

On Apr 17, 2010, at 9:38 AM, Brendan Eich wrote:

> On Apr 16, 2010, at 2:31 PM, David Herman wrote:
> 
>> PS Still, I have my doubts about using any such mechanisms for versioning. 
>> Incidentally, ROC was just talking about versioning and metadata on the web:
>> 
>>    http://weblogs.mozillazine.org/roc/images/APIDesignForTheMasses.pdf
> 
> Rob's blog post: 
> http://weblogs.mozillazine.org/roc/archives/2010/04/api_design_for.html
> 
> 
>> He wasn't talking about JS API design, but some of the lessons still apply.
> 
> 
> Old WHATWG co-conspirators like me obviously agree on the principles roc 
> presents, but they do not work so well in JS compared to HTML or even CSS. 
> Consider HTML markup:
> 
> <video ...>
>     <object ...></object>
> </video>
> 
> A new HTML5 video tag with an object tag as fallback, to use a plugin to 
> present the video for pre-HTML5 browsers. There are text-y examples that work 
> too, even if the degradation is not as graceful as you might get with a 
> plugin (plugins can lack grace too :-/).
> 
> CSS has standardized error correction from day one, although as noted in 
> comments on roc's blog it lacks "feature detection". But graceful degradation 
> seems to work as well with CSS as with HTML, if not better.
> 
> With JS, new syntax is going to make old browsers throw SyntaxErrors. There's 
> no SGML-ish container-tag/point-tag model on which to build fallback 
> handling. One could use big strings and eval, or XHR or generated scripts to 
> source different versions of the JS content -- but who wants to write 
> multiple versions of JS content in the first place.
> 
> The "find the closing brace" error correction idea founders on the need to 
> fully lex, which is (a) costly and (b) future-hostile. Allowing new syntax in 
> the main grammar only, not in the lexical grammar, seems too restrictive even 
> if we never extend the lexical grammar -- we might fix important bugs or 
> adjust the spec to match de-facto lexical standards, as we did for IE's 
> tolerance of the /[/]/ regexp literal.
> 
> So API object detection with fallback written in JS random logic works (for 
> some very practical if not theoretically pretty definitions of "works") for 
> the non-syntactic extensions coming in Harmony, assuming we can dodge the 
> name collision bullets. But for new Harmony syntax, some kind of opt-in 
> versioning seems required.
> 
> We survived this in the old days moving from JS1.0 to JS1.2 and then ES3. One 
> could argue that the web was smaller then (it was still damn big), or that 
> Microsoft's monopolizing helped consolidate around ES3 more quickly (it did 
> -- IE started ignoring version suffixes on <script language=> as I noted 
> recently).
> 
> Roc's point about fast feedback from prototype implementations to draft 
> standards is the principle to uphold here, not "no versioning".
> 
> Obviously we could avoid new syntax in order to avoid opt-in versioning, but 
> this is a bad trade-off. JS is not done evolving, syntax is user interface, 
> JS needs new syntax to fix usability bugs. I'm a broken record on this point.
> 
> Secondarily, new syntax can help implementations too, both for correctness 
> and optimizations.
> 
> So I should stop being a broken record here, and let others talk about opt-in 
> versioning. It seems inevitable. We have it already in a backward-compatible 
> but semantically meaningful (including runtime semantic changes!) sense in 
> ES5 with "use strict".
> 
> Opt-in versioning s not a free ride, but it is going to a destination we need 
> to reach: new syntax where appropriate and needed for usability and 
> productivity wins.
> 
> /be

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to