Allen Wirfs-Brock wrote:
Well, strictly speaking the object literal that is the RHS of the above example is /defining/ properties on a new object and those the properties of that object are then /assigned/ to corresponding properties of the LHS object.

Of course, but see below.

Regardless, the associations between the symbols and the semantics don't have to be perfect they just have to be close enough to have some mnemonic value.

Here I think you're going to run into trouble. The syntax has to be pretty sweet to meet general acclamation in the community and to achieve consensus in TC39.

Language design involves conservative reuse of older languages' design, some cross-cutting thinking that ideally makes maximum use of a few cleanly composing primitives, and no mercy for "close enough (but not quite right)". Symbology is not arbitrary, or no more arbitrary than history and tradition in the relevant CS subculture.

Yes, JS is in the C family so it has some unusual (to those not native-born to C or JS) parts. Idioms arise in all practical languages.

But .= is not the clear "assign not define" winner, and := is quite different from Algol et al. (Pascal, Ada), and Smalltalk (thanks for reminding me). If the goal is batch assignment, then writing the batch parts as property definitions in an object literal is mixing "define" with the outer, later "assign", and .= misplaces the dot. The batch assignment proposal goes the other way:

  obj.{ prop1 = val1; prop2 = val2 ... }

with a more statement-like grammar within braces, yet without recreating 'with'.

I don't know that batch assignment will achieve consensus. The semantics with nested .{...} occurrences is more powerful than .=, which doesn't handle nesting (neither does := AFAICT). Whatever the semantics, getting syntax past the various taste-testers and grammar buffs is a tall order. I don't think "perfect" is possible but I do think "close enough to have some mnemonic value" is not sufficient.

If batch assignment including nesting is the winning semantics, the syntax probably follows and can't use .=. So reserving .= based on := (which is not yet in Harmony) seems premature. Sorry to push back, but after mustache I think we need to be pickier about new syntax.

And (to beat my favorite drum) we must not starve the polyfillable/no-new-syntax API alternatives (Object.assign, Object.define or Object.update) in the mean time, where new syntax is not required by new semantics.

/be


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

Reply via email to