Enriched Descriptors, maybe ES7 ?

Andrea Giammarchi andrea.giammarchi at gmail.com
Mon Mar 10 08:45:23 PDT 2014


Thanks Tom, I see what you mean but using proxies is a performance killer,
while I am trying to propose something that theoretically could also give a
performance boost.

I am not proposing custom descriptor attributes here, I am proposing
`type`, `arguments` (or `parameters`) and `returns` as specified/extra
descriptor properties capable to bring "typed properties" to, maybe, ES7

My repository already does this and it works even copying objects, if this
is done through `getOwnPropertyDescriptor`

So, custom descriptor properties a part, would ES7 consider to implement
types not only for `StructType` but also for runtime defined shapes so that
`Object.defineProperty({}, 'num', {value: 123, writable: true, type:
int32})` works same as my polyfill does already?

Thanks




On Mon, Mar 10, 2014 at 12:02 AM, Tom Van Cutsem <tomvc.be at gmail.com> wrote:

> 2014-03-09 21:05 GMT+01:00 Brendan Eich <brendan at mozilla.com>:
>
>> Tom has experimented, IIRC. I don't know which implementations preserve
>> extended property descriptor properties.
>
>
> As Allen mentioned earlier, proxies should receive in their defineProperty
> trap the full descriptor object as it was passed in by the user, including
> any custom attributes. The proxy is free to store it, and return it from
> any subsequent getOwnPropertyDescriptor trap (which is also specced so that
> it can return a non-normalized descriptor object with custom attributes).
>
> Normal (non-proxy) objects of course cannot store non-normalized
> descriptors, so any custom attributes are lost. Changing this would
> presumably have a big impact on implementations (which probably don't hang
> on to descriptor objects at all).
>
> If you want to experiment with custom attributes, my harmony-reflect shim
> supports this for proxies:
>
> var props = {};
> var o = new Proxy({},{
>   defineProperty: function(target, name, desc) {
>     props[name] = desc;
>     return true;
>   },
>   getOwnPropertyDescriptor: function(target, name) {
>     return props[name];
>   }
> });
> Object.defineProperty(o,"p",{value:42, configurable:true, hello:true})
> JSON.stringify(Object.getOwnPropertyDescriptor(o,"p"))
> // prints
> // {"configurable":true,
> //  "value":42,
> //  "writable":false,
> //  "enumerable":false,
> //  "hello":true } // <- custom attribute preserved
>
> Using Firefox's built-in direct proxies implementation I get a TypeError.
> I'll investigate further and file a bug.
>
> Regards,
> Tom
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140310/07885a66/attachment.html>


More information about the es-discuss mailing list