Improving ECMAScript as a compilation target

Allen Wirfs-Brock Allen.Wirfs-Brock at microsoft.com
Tue May 5 18:53:01 PDT 2009


>-----Original Message-----
>From: Brendan Eich [mailto:brendan at mozilla.com]
...
>my "Art of the Meta-Object Protocol" is in a box somewhere for a
>reason ;-). But real-world use-cases are pressing upon us.
>
I dug mine out after the last F2F, it's been sitting on my desk unread since...

>
>> A simpler model would only have these handlers
>> 	assign	called on any explicit assignment to a non-existent
>property
>
>Still does not connote "non-existent".

If all these handlers are only invoked in missing property situations then we can probably get away with an implicitly non-existent connotation.

...
>
>> 	delete	delete a non-existent property
>
>Sure (hard to care about this case), but the ability to use catchalls
>to emulate arrays may be an important use-case for virtualizing
>systems. If delete can't be handled for existent properties then
>length can't be updated.
>

So, maybe delete falls into a different category of handlers (perhaps along with invoke and construct on the object itself, defineProperty, etc...) that aren't about non-existent properties but are hooks on important object level meta operations (at MOPish step  but it keeps the catch all story cleaner).

>
>> 	getValue	called on any implicit or explicit non-existent
>property
>> access to that is not one of the above
>
>What is an implicit property access other than the above? I added
>"has" because property lookup does not getValue, and must not, but
>unless you ignore catchalls on the global object and objects named by
>with statement heads, you need "has" too.
>
I hadn't thought through "implicit" but I was at least thinking about accesses from built-ins. I would also expect that getValue (and the others) would need to work on implicit accesses to the global object or a with object.  With lookup might be trickly but I think it could be probably be make to work at least in the specification.  It might be necessary to make DefaultAction contextual so that it does something different when trying to resolve a with binding
>
>> At most one of the above is called on any property reference, and
>> only if the property does not exist.
>
>Besides making it impossible to virtualize arraylikes, this will make
>virtual DOMs hard to implement efficiently.
Is there anything other than the delete hander that is needed to emulate arrays?  What is the DOM problem?

...
>
>So perhaps invoke could be for non-callable (including non-existent,
>i.e., imputed-undefined-value) properties.
>
I have some similar concerns about assignments to readonly properties and perhaps other error conditions.  Maybe they are error handlers.

On a complete different plane, here is a wacky idea that integrates this work into Object.defineProperty:
  Object.defineProperty(obj, undefined, {invoke: function(id, args) {...}, ...});

Keeps the API surface smaller and  emphasizes that this is really an way to define the handling of otherwise undefined properties. 

Allen





More information about the es-discuss mailing list