On May 29, 2012, at 9:33 AM, Tab Atkins Jr. wrote:

> Same thoughts here.  Regular devs (like me!) only see
> [[DefineOwnProperty]] when creating a literal, and then there's no
> observable distinction between these two in normal circumstances:

Bingo. The different between [[DefineOwnProperty]] and [[Put]] is subtle and 
rarely encountered when dealing with a new object.

The distinction between the two operations is a corner case of the language, 
and [[Put]] is the common case.

> I don't think it's worth optimizing for the [[DefineOwnProperty]]
> case.  We should just use the standard "foo:bar" syntax, and have it
> invoke [[Put]] behavior.

I agree we should only be considering syntax for [[Put]] -- syntactic sugar 
should be to support common patterns, not to invent patterns that don't fit 
smoothly within the rest of the language.

However, I really, really oppose reusing syntax that's used for declarative 
data construction (i.e., literals) to notate *update* operations. We should not 
use the object literal notation for [[Put]]. We should use assignment syntax, 
which corresponds to doing assignment on an object.

This was the motivation between my blog post a while back on a different syntax 
for mustache:

    http://blog.mozilla.org/dherman/2011/12/01/now-thats-a-nice-stache/

tl;dr: instead of an object literal, the RHS of mustache should have a syntax 
that corresponds more closely to that of blocks. It allows assignments and 
method calls.

    array.{
        pop();
        pop();
        pop();
    };

    path.{
        moveTo(10, 10);
        stroke("red");
        fill("blue");
        ellipse(50, 50);
    };

    this.{
        foo = 17;
        bar = "hello";
        baz = true;
    };

(I'll eventually write up a new strawman for it, but I'm working on the new 
wiki right now which I consider higher priority.)

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to