Just wanted to chime in with the fact this has been a thing in
CoffeeScript for most (if not all) its existence, as well as with Ruby
hash maps, which special-case string keys (you can do
`{"foo#{bar}baz": whatever}`).

Not that I would expect this to have much impact on whether this
really minor nice-to-have makes it in, though...

-----

Isiah Meadows
[email protected]
www.isiahmeadows.com

On Thu, Nov 7, 2019 at 4:23 PM Alex Kodat <[email protected]> wrote:
>
> Gus,
>
> Sure, but your (const) example is simply syntactically invalid – 
> syntactically invalid code will always be hard for humans to digest. A better 
> example might be one involving operator precedence – I’ll plead guilty to 
> adding unnecessary parentheses so someone looking at code doesn’t have to 
> waste cycles thinking through operator precedence issues.
>
> But, in any case, I don't think human would find:
>
>   let obj = {`foo bar`: 1}
>
> or even
>
>   let obj = {`foo${i}`: 1}
>
> daunting to parse. And if it upsets them, just like I add unnecessary 
> parantheses to my code, they could do
>
>   let obj = {[`foo${i}`]: 1}
>
> if they feel that somehow makes the code clearer (it gives me a headache ;-)).
>
> Thanks
>
> ------
> Alex Kodat
> Senior Product Architect
> Rocket Software
> t: +1 781 684 2294 • m: +1 315 527 4764 • w: http://www.rocketsoftware.com/
>
> From: Gus Caplan <[email protected]>
> Sent: Thursday, November 7, 2019 3:13 PM
> To: Alex Kodat <[email protected]>
> Cc: Jordan Harband <[email protected]>; [email protected]
> Subject: Re: Template literal property names in object literals
>
> Syntactic ambiguities are not very representative of what humans find 
> ambiguous. For example, `const x = 1 const x = 2` (no semicolon) is not 
> ambiguous to a parser at all, but humans have a hard time tracking it.
>
> On Thu, Nov 7, 2019 at 12:53 PM Alex Kodat <mailto:[email protected]> 
> wrote:
> Jordan,
>
> That’s not an ambiguity, it’s just a rule of thumb that’s currently true. No? 
> My question is whether adding TemplateString to ComputedPropertyName in the 
> spec would create **syntactic** ambiguities or daunting implementation issues.
>
> Clearly, there's little interest in this so I'll drop it, I was just curious 
> as I, at least, was somewhat surprised to see it didn't work.
>
> Thanks
>
> ------
> Alex Kodat
> Senior Product Architect
> Rocket Software
> t: +1 781 684 2294 • m: +1 315 527 4764 • w: 
> https://nam01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.rocketsoftware.com%2F&data=02%7C01%7C%7Ce77faaad7c8444d9792f08d763c74e54%7C79544c1eed224879a082b67a9a672aae%7C0%7C1%7C637087579982532174&sdata=wl5HN9LEKavzBGkxJf0SugC2iN2oOQu12kmnXKUkXoo%3D&reserved=0
>
> From: Jordan Harband <mailto:[email protected]>
> Sent: Thursday, November 7, 2019 2:44 PM
> To: Alex Kodat <mailto:[email protected]>
> Cc: Gus Caplan <mailto:[email protected]>; mailto:[email protected]
> Subject: Re: Template literal property names in object literals
>
> It would create the ambiguity that "every property name not in brackets is 
> static/hardcoded" is no longer true.
>
> On Thu, Nov 7, 2019 at 12:14 PM Alex Kodat 
> <mailto:mailto:[email protected]> wrote:
> Jordan,
>
> The sentiments in that link discuss the wisdom of having the StringLiteral 
> definition include NoSubstitutionTemplate, a question about which I am 
> agnostic, and wouldn't provide the full functionality I'm asking about, 
> anyway.
>
> And I also understand that the spec currently only allows computed property 
> names in square brackets.
>
> My suggestion was that ComputedPropertyName *could* be changed to include 
> TemplateString (without square brackets). Whether this is worth doing or 
> paints JS syntax into a corner is a fair question, but I don't see that 
> adding TemplateString to ComputedPropertyName would create any syntactic 
> ambiguities and wouldn't seem to present daunting implementation issues. But 
> maybe this last assertion is incorrect and ambiguities would arise or 
> implementation would be a nightmare?
>
> Thanks
>
> ------
> Alex Kodat
> Senior Product Architect
> Rocket Software
> t: +1 781 684 2294 • m: +1 315 527 4764 • w: 
> https://nam01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.rocketsoftware.com%2F&data=02%7C01%7C%7Ce77faaad7c8444d9792f08d763c74e54%7C79544c1eed224879a082b67a9a672aae%7C0%7C1%7C637087579982532174&sdata=wl5HN9LEKavzBGkxJf0SugC2iN2oOQu12kmnXKUkXoo%3D&reserved=0
>
> From: Jordan Harband <mailto:mailto:[email protected]>
> Sent: Thursday, November 7, 2019 1:46 PM
> To: Alex Kodat <mailto:mailto:[email protected]>
> Cc: Gus Caplan <mailto:mailto:[email protected]>; 
> mailto:mailto:[email protected]
> Subject: Re: Template literal propery names in object literals
>
> Anything dynamic - computed - should be in brackets, since that's what that 
> indicates.
>
> Thus, template literals with substitutions must require brackets.
>
> Based on sentiments like 
> https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fecma262%2Fissues%2F1399%23issuecomment-452910799&data=02%7C01%7C%7Ce77faaad7c8444d9792f08d763c74e54%7C79544c1eed224879a082b67a9a672aae%7C0%7C1%7C637087579982542161&sdata=V%2BzJuiHgRE6plHXA5lyY4xhlhv4O5%2Fvl6UTc1yeaRzk%3D&reserved=0,
>  either all template literals or none should be permitted in a given position.
>
> Thus, no change is possible.
>
> On Thu, Nov 7, 2019 at 10:00 AM Alex Kodat 
> <mailto:mailto:mailto:mailto:[email protected]> wrote:
> Thanks Gus,
>
> Good stuff. Though I think I’d take a different tack on the discussion at 
> that link, especially as I think the template literals should allow 
> substitutions (why not?):
>
> let obj = { `${Date()}`: 1};
>
> I guess the tack I would take in the spec would be to add TemplateLiteral to 
> ComputedPropertyName and not worry about whether or not it's a 
> NoSubstitutionTemplate.
>
> Thanks
>
> ------
> Alex Kodat
> Senior Product Architect
> Rocket Software
> t: +1 781 684 2294 • m: +1 315 527 4764 • w: 
> https://nam01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.rocketsoftware.com%2F&data=02%7C01%7C%7Ce77faaad7c8444d9792f08d763c74e54%7C79544c1eed224879a082b67a9a672aae%7C0%7C1%7C637087579982542161&sdata=oWJOeksC4idx7j4ffoOjNMiT6oXmY8XmVaAgQJnmHPM%3D&reserved=0
>
> From: Gus Caplan <mailto:mailto:mailto:[email protected]>
> Sent: Thursday, November 7, 2019 11:13 AM
> To: Alex Kodat <mailto:mailto:mailto:mailto:[email protected]>
> Cc: mailto:mailto:mailto:mailto:[email protected]
> Subject: Re: Template literal propery names in object literals
>
> Related discussion 
> https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fecma262%2Fissues%2F1399&data=02%7C01%7C%7Ce77faaad7c8444d9792f08d763c74e54%7C79544c1eed224879a082b67a9a672aae%7C0%7C1%7C637087579982552157&sdata=Lm5ZzlaIBiRhWfI%2B3NM7q6WN4R9zeDtak5eb1L8nD5A%3D&reserved=0
>
> On Thu, Nov 7, 2019 at 8:46 AM Alex Kodat 
> <mailto:mailto:mailto:mailto:mailto:mailto:mailto:[email protected]> 
> wrote:
> Just curious. Is there a reason template literals are not allowed as property 
> names in object literals? I can do:
>
>    let obj = {'foo bar': 1};
>
> and
>
>    let obj = {"foo bar": 1};
>
> but not
>
>    let obj = {`foo bar`: 1};
>
> It doesn't seem that allowing the latter would present any syntactic problems 
> and seems like almost an oversight that it's not allowed.
>
> The main reason I ask is that we've gone completely over to using template 
> literals for all our literals (why not?) and was surprised that we can't use 
> a template literal as an object literal property name. Obviously, we can do:
>
>    let obj = {[`foo bar`]: 1};
>
> And given that square brackets allow arbitrary expressions for propery names, 
> it wouldn't seem that supporting template literals for object literal 
> property names would not present any daunting implementation issues.
>
> I guess I'd argue that the Principle of Least Astonishment and/or 
> completeness suggests that JS should support this.
>
> Sorry if this has been asked before but couldn't find anything in the archive.
>
> Thanks
>
> [snip url junk]
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to