Revisit the String template syntax

Brian Goetz brian.goetz at oracle.com
Sat Apr 15 13:07:30 UTC 2023


Libraries don’t have the option to use \ because they can’t modify the language grammar.  This is why they gravitate towards inline syntax like $ — because they have no choice.  They’ve done what they have to. The language has different options. 

I understand why you think familiarity might justify doing the objectively worse thing, but am confident we would regret it if we gave into this temptation. 

This is a pretty clear no. 

Sent from my iPad

> On Apr 15, 2023, at 2:50 AM, forax at univ-mlv.fr wrote:
> 
> ----- Original Message -----
>> From: "Brian Goetz" <brian.goetz at oracle.com>
>> To: "Remi Forax" <forax at univ-mlv.fr>
>> Cc: "amber-spec-experts" <amber-spec-experts at openjdk.org>
>> Sent: Wednesday, April 12, 2023 6:21:38 PM
>> Subject: Re: Revisit the String template syntax
> 
>> The backslash syntax is objectively better than the dollar-sign syntax, which is
>> why we selected it in the first place.  Reasons included:
>> 
>> - Today, “${name}” is a valid string literal, whereas “\{name}” is not.
>> - The language already has an escaping mechanism for string contexts; using the
>> one we have is preferable to inventing another one.
>> - Dollar signs will appear in string context fairly regularly, and therefore
>> would need yet more escaping.
>> 
>> We knew people would say “why don’t you ‘just’ do what ${MyFavoriteLanguage}
>> does”, but this isn’t a reason to reconsider; the fact that other languages
>> have continued to use the dollar-sign convention was well in evidence when the
>> initial design choices were made, and there are no new arguments to support
>> revisiting this question.
>> 
>> Whether to use braces or parens or brackets is largely an arbitrary choice, but
>> I don’t see a lot of reason to recall this already-sailing ship.
> 
> 
> I believe that the backslash syntax is better if we were in 1995, trying to design Java but since then, the dollar-sign syntax have been the go to syntax for string interpolation in the Java ecosystem. That's why actual most of the Java developers prefer the dollar-sign syntax to the backslash syntax (at least the one at Devoxx France i've asked), because they to not have to reconfigure their brain to recognize a new syntax.
> 
> Rémi
> 
>> 
>> 
>> 
>>>> On Apr 11, 2023, at 2:32 PM, Remi Forax <forax at univ-mlv.fr> wrote:
>>> 
>>> I've promoted this email to amber-spec-experts given that several people on the
>>> internet and offline have said more or less the same thing.
>>> 
>>> Even if it's not for 21, now that a string template is always prefixed by a
>>> template processor, the part in between quote does not need to rely on
>>> backslash '\' anymore.
>>> 
>>> Should we still keep the current syntax \{...} or should we go to the more usual
>>> ${...} syntax ?
>>> 
>>> regards,
>>> Rémi
>>> 
>>> ----- Original Message -----
>>>> From: "Octavia Togami" <octavia.togami at gmail.com>
>>>> To: "amber-spec-comments" <amber-spec-comments at openjdk.org>
>>>> Sent: Tuesday, April 11, 2023 1:39:20 AM
>>>> Subject: Syntax question for JEP 430: String Templates
>>> 
>>>> Hi,
>>>> 
>>>> I was reading this portion of the alternatives section:
>>>> 
>>>>> For the syntax of embedded expressions we considered using ${...}, but that
>>>>> would require a tag on string templates (either a prefix or a delimiter other
>>>>> than ") to avoid conflicts with legacy code.
>>>> 
>>>> And it seems that this is no longer a valid reason, as per [1] there
>>>> is always a required prefix anyways. Is there another reason to avoid
>>>> using this syntax now?
>>>> 
>>>> Thanks,
>>>> Octavia
>>>> 
>>>> [1]:
>>>> https://mail.openjdk.org/pipermail/amber-spec-experts/2022-October/003631.html


More information about the amber-spec-experts mailing list