It sounds like this is discussing the implementation in V8, unless it’s done similarly in other engines. Possibly it’s talking about a polyfill mechanism that might be used in compile-to-js implementations that target older browsers.
V8’s template map is a Map with smi keys representing the hash of the raw string, containing a smaller array of lists of strings which yield the same hash (usually a single template literal) Unfortunately, since the Map is not tied directly to the callsite objects (which aren’t available at parse-time when the hashing occurs), there’s no way to store these callsites in a WeakMap, and they are never collected. If WeakSets were iterable, this could be solved pretty easily, but these are the tools we’ve got :( > On Jun 16, 2015, at 10:31 PM, Mark S. Miller <erig...@google.com> wrote: > > Hi Yusuke, I am not sure I understood your message. Could you show some > example code that would observe the observable difference you have in mind? > > > > On Tue, Jun 16, 2015 at 7:25 PM, Yusuke SUZUKI <utatane....@gmail.com > <mailto:utatane....@gmail.com>> wrote: > Hi forks, > > In ES6 spec, template site objects are strongly referenced by the > realm.[[templateMap]]. > So naive implementation leaks memory because it keeps all the site objects in > the realm. > > However, we can alleviate this situation. > Because template site objects are frozen completely, it behaves as if it's a > primitive value. > It enables the implementation to reference it from the realm weakly. When all > disclosed site objects are not referenced, we can GC them because nobody > knows the given site object is once collected (& re-generated). > > But, even if the object is frozen, we can bind the property with it > indirectly by using WeakMap. > As a result, if the site objects are referenced by the realm weakly, users > can observe it by using WeakMap. > > To avoid this situation, we need to specially handle template site objects in > WeakMap; WeakMap refers template site objects strongly (if we choose the weak > reference implementation for realm.[[templateMap]]). > But this may complicate the implementation and it may prevent implementing > WeakMap as per-object table (it can be done, but it is no longer simple > private symbols). > > Is it intentional semantics? I'd like to hear about this. > (And please point it if I misunderstood) > > Best Regards, > Yusuke Suzuki > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> > https://mail.mozilla.org/listinfo/es-discuss > <https://mail.mozilla.org/listinfo/es-discuss> > > > > > -- > Cheers, > --MarkM > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss