Mark S. Miller <mailto:[email protected]>
January 30, 2012 10:19 AM
On Sun, Jan 29, 2012 at 1:25 PM, Allen Wirfs-Brock <[email protected] <mailto:[email protected]>> wrote:

    Here is a first cut at some improved terminology:

    ECMAScript Object - an object whose primitive semantics are
    specified by the ECMAScript specification
    Foreign Object - an object whose primitive semantics differ from
    those specified by the ECMAScript specification


Can we get rid of the concept of "Foreign Object" entirely, and just treat all the objects we have in mind (e.g. DOM nodes) as "Built in proxy objects"?

+lots, again.

We need to shaver closer with Occam's razor. I do not think "Built-in" is a useful distinction below:

    [Allen wrote] By "primitive semantics" I mean language level
    semantics defined by the ECMAScript specification include the
    existence and specified behavor of "internal properties".  It does
    not mean "application level" semantics such as the values of
    object properties or the actions performed by function objects
    when called.

    Other terms that may be useful:

    Standard Object - An ECMAScript object whose application level
    semantics are defined by the ECMAScript specification
    Built-in Object - an object that is provided by the ECMAScript
    implementation.  A built-in object could be either an ECMAScript
    Object or a Foreign Object
    ECMAScript Function - an ECMAScript Object that has a [[Call]]
    internal property.
    Foreign Function - a Foreign Object that has a [[Call]] internal
    property
    ECMAScript Code Function - an ECMAScript Function whose
    application level semantics are defined using ECMAScript code
    ECMAScript Foreign Code Function - an ECMAScript Function whose
    application level semantics are defined in some manner other than
    with ECMAScript code


Nit: please avoid "ECMAScript" all over. It's ugly and overlong. We should use the shortest unambiguous phrase we can, clearly defined in the spec as a term of art.

Obvious antonyms: (native, foreign), (native, alien). But "native" is confusing due to other meanings in common use nearby and even in common JS parlance (and in ECMA-262, till we fix it).

Proposal: use "naive" not "native". The antonym is "proxy" (not "sophisticated" :-P). Five letters each, short and sweet. We can make the definition clear in the spec.

Then the only distinction ignoring built-in vs. self-hosted is whether an object can be implemented in JS using non-proxy intercession (accessors, certain methods called implicitly), vs. whether it requires computation (traps) behind operations not interceded-for by accessors and methods.

Notice that proxies may have C++ (if that's the host language) traps as well as JS. That's not an issue (we do it in Firefox) in terms of power. Again, I agree with Mark (and Tom): we should tame all objects to be naive or proxy.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to