@@initialize, or describing subclassing with mixins
Boris Zbarsky
bzbarsky at MIT.EDU
Mon Jun 30 06:41:50 PDT 2014
On 6/30/14, 5:37 AM, Jussi Kalliokoski wrote:
> However, the key thing is that it could be applied to any given object, not just
> instances of the host object.
The problem with this is that it requires either allocating the hidden
state outside the object itself somewhere or requiring all objects to
have space for this hidden space or both (e.g. allocating some amount of
space for hidden state in all objects but spilling out into out-of-line
slots when you want more hidden state than that).
So this fails one of the primary design criteria for @@create: being
able to explain the existing builtins (both ES and DOM), which allocate
hidden state inline for efficiency's sake.
I realize you consider this an irrelevant implementation detail, but it
_is_ important.
> As an example, here's how you could self-host Map in these terms:
> https://gist.github.com/jussi-kalliokoski/5ef02ef90c6cbb8c1a70 . In the
> example, the uninitialized state is never revealed.
Right, at the cost of requiring the symbol thing, which costs both
performance and memory.
> DocumentFragment.prototype.appendChild.call(this, value);
This is an interesting example. How do you expect the appendChild code
to perform the check that its this value is a Node (not necessarily
DocumentFragment, note, appendChild needs to work on any node) in this
case? Your time budget for this is 20 machine instructions as an
absolute limit, 10 preferred and your space budget is "as small as
possible".
(This is not even worrying about the fact that in practice we want
different in-memory layouts for different DOM objects, that
Object.prototype.toString needs to return different values for different
sorts of DOM objects, or that some DOM objects need different internal
hooks (akin to proxies) from normal objects.)
-Boris
More information about the es-discuss
mailing list