Private symbols as WeakMap sugar

Brendan Eich brendan at mozilla.com
Wed Jan 16 11:27:59 PST 2013


David Bruant wrote:
> 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.

No, it's a hit, pure and simple. Engines do various things, SpiderMonkey 
does semi-static analysis (type inference), but in generic code, you 
propose to add a ?: to every [] operation. I think that's a non-starter. 
I invite others (Andreas R. especially) to weigh in.

/be


More information about the es-discuss mailing list