using Private name objects for declarative property definition.
brendan at mozilla.com
Tue Jul 12 07:43:42 PDT 2011
On Jul 12, 2011, at 2:54 AM, Andreas Rossberg wrote:
> On 9 July 2011 17:48, Brendan Eich <brendan at mozilla.com> wrote:
>> Adding names as a distinct reference and typeof type, extending
>> WeakMap to have as its key type (object | name), adds complexity
>> compared to subsuming name under object.
> It seems to me that you are merely shifting the additional complexity
> from one place to another: either weak maps must be able to handle
> (object + name) for keys (instead of just object), or objects must
> handle (string + object * isName) as property names (instead of just
> string + name).
Quite right. This was a part of ECMA-357, E4X, which we have suppported in SpiderMonkey starting in late 2004. It was a part of ES4 as well.
On the other hand, there's no free lunch for private names having a new typeof type: "name". They cannot be strings, so the VM's property lookup and identifier-handling code paths all need a wider type. True, they *could* be UUIDs in strings that have a tag bit set to prevent forgery, but that's not a likely implementation.
So given that id types and lookup code paths have to change anyway, this seems more of a wash than you suggest. Not a total wash, but not a clear with for new typeof-type "name".
More information about the es-discuss