Private symbols as WeakMap sugar

David Bruant bruant.d at gmail.com
Wed Jan 16 10:53:08 PST 2013


Le 16/01/2013 19:42, Brendan Eich a écrit :
> David Bruant wrote:
>> Hi,
>>
>> This is an idea naturally derived of all the current discussions 
>> about WeakMaps and Private symbols. The proposal is easily summarized 
>> by these lines of code:
>>
>>     var wm = new WeakMap();
>>     var o = {};
>>     o[wm] = 12 // desugars to wm.set(o, 12)
>>     var a = o[wm]; // desugars to wm.get(o);
>>     wm in o // desugars to wm.has(o);
>>     delete o[wm] // desugars to wm.delete(o); 
>
> You are not showing the desugaring in general:
>
> function get(o,x) {
>   return o[x];
> }
>
> must transform to
>
> function get(o,x) {
>   return (x is WeakMap) ? x.get(o) : o[x];
> }
You're right, I hadn't thought of that.

> This is not an acceptable hit for every []-named property access.
I intuit (and may be wrong) that even just observing types (weakmap or 
stringified type) passed to a []-access can be a good indicator of how 
best []-named property access should be JIT-compiled. You pay the price 
of the (x is WeakMap) test only the time the JIT warms up.
Given what's in current engines, it sounds doable.

David


More information about the es-discuss mailing list