Using Lars's reply to respond to Mark's proposal, since it was not cross-posted. Mark's proposal text, one level of cite-quotation removed, first:

-----Original Message-----
From: Mark S. Miller [mailto:[EMAIL PROTECTED]
Sent: 4. juni 2008 17:59
To: Douglas Crockford
Cc: Lars Hansen; [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Member Ordering

On Wed, Jun 4, 2008 at 8:42 AM, Douglas Crockford
<[EMAIL PROTECTED]> wrote:
That is indeed discouraging. Perhaps ES3 did the right thing by
leaving the order unspecified.

No. Please specify some deterministic order. I don't much care which.
But leaving it unspecified complicates testing unnecessarily.
Also, please see <http://www.cs.berkeley.edu/~amettler/purecomp.pdf>
(draft paper) for further benefits that can only be realized
after removing such unavoidable sources of hidden
non-determinism. (Brendan, I've added you to the cc to make
sure you see this paper. It makes another interesting bridge
between information-flow and ocaps.)

(Thanks!)

I agree that we need to specify more than what ES1-3 specified.

The de-facto standard of insertion order remains mandatory, as far as I can tell, for most objects and named properties. You can't make a web-compatible browser without it.

But index-named properties, specifically in Array instances, could be treated differently -- maybe. We'll find out with very-large-scale Firefox 3 testing how often any web content cares that index order is not necessarily insertion order.


A proposal:

* For direct instances of Array: Use the Opera ordering for
the own properties. Then the normal prototype-following
insertion order for ascending the superclass chain. Note that
Array.prototype is not an instance of Array, and so should
enumerate by insertion order.


Array.prototype is an Array instance, but with a [[Prototype]] linking to Object.prototype instead of to Array.prototype (as all other Array instances have) -- see ECMA-262 Edition 3 15.4.4, first two paragraphs:

15.4.4 Properties of the Array Prototype Object

The value of the internal [[Prototype]] property of the Array prototype object is the Object prototype object (section 15.2.3.1).

The Array prototype object is itself an array; its [[Class]] is "Array", and it has a length property (whose initial value is +0) and the special internal [[Put]] method described in section 15.4.5.1.


On the other hand, Mark's proposal happens to match Firefox 3 (SpiderMonkey JS1.8) because Array.prototype is not "dense" -- it has a bunch of named properties (to wit, the standard methods plus some extensions). But this is just a bug.

I like that the proposal does not generalize to indexed properties in any object. That seems better than obligating all implementations to segregate named from indexed properties in their property-map implementations. Array, Vector, other array-likes can opt in. ES4 should specify which ones do.

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

Reply via email to