On Apr 17, 2010, at 6:07 PM, Peter van der Zee wrote:

To be solved:
- Allow non-string-property keys
- Allow "hidden" properties, non-enumerable, not generically accessible (like stringed keys are now). To be honest, I'm still not 100% clear on this one.

I don't see how these two differ.


Ways of doing that:
- By identity
-- Property is inaccessible once the identity is gc'ed
-- Could cause additional constraints, make an implementation more complex and heavier in general (circular checks)
- By some kind of private syntax, see the straw for that

The private syntax is so you can use o.p instead of o[x] where x is a Name object; private p would bind the name p lexically to a Name object and use it instead of the string "p" when evaluating o.p.


- Simply add new object / instance methods to the language in a sane sounding way, taking the backwards compat problems for granted. This is by far the easiest and yet the most opposed way.

This is what ES5 did.


- Add new methods with obscure names in an effort to minimize backwards compat problems. This is what __proto__ would fall under (in my opinion). I think that's also part of the start of this thread and the comparison to "that other language"...

This is not favored by TC39, because the __ convention is no guarantee against collisions, and it is rejected by some sanitizers.


As far as versioning goes, this seems like an appealing option at first but can lead to a complex system of rules and versions to be kept supporting. Basically Brendan's objections. Any versioning scheme will come down to this, whether it be feature specific (like an include) or version specific (minor/major version or whatever).

Real web experience suggests feature-testing, or really object detection, is less combinatorial explosive. Once a browser supports the new object, the script can use it. No need to enumerate browser or rendering engine names in a conditional or X-UA-Compatible header.


So. What problem are we trying to solve here and what options do we have (and are viable) to extend the specification?

For Harmony we have new syntax, so the problem is clear: we need some kind of opt-in versioning mechanism for authors to use, where old browsers do not process the new version. This could involve RFC 4329 style

<script src="harmony.js" type="application/ecmascript;version=6"></ script>

but then the question becomes: how does the content author ship an ES3 or lower script to older browsers? See the older versioning page I wrote, which Collin Jackson worked on too, at

http://wiki.ecmascript.org/doku.php?id=proposals:versioning

An in-language pragma, e.g.

<script>
"use vesrion 6";
// Harmony code here...
</script>

would be ignored by older browsers. This seems bad because downrev browsers would try to run the script content, unless you use server- side version detection to ship this only to uprev browsers.

Harmony having new syntax does not mean we are opening up the design space to make some new, incompatible version of the language. You seem to allow for that as a possible future course, but TC39 members are uniformly against this path AFAICT. See http://wiki.ecmascript.org/doku.php?id=harmony:harmony .

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

Reply via email to