JEP445 meets JEP459

Brian Goetz brian.goetz at oracle.com
Tue Feb 6 17:14:52 UTC 2024


Similar things have been suggested before, but there are two primary 
concerns here that make it a "clever" but unattractive-in-the-long-term 
direction.

The main one is "the onramp should lead to the highway."  If we give a 
special, magic way to print templated strings, but nothing else, this is 
an easy incantation to teach, but it doesn't go very far.  If you want 
to do even a little bit more (e.g., print to a file, or to standard 
error, or just print out a string with no formatting, etc), you have to 
switch to a completely different mechanism, and now you need to know TWO 
things and know when to use one or the other.  It is a shortcut that 
becomes a "beginner's dialect" because it does not lead smoothly to 
learning the "regular" language.

Second, the possibility that a string template could have side-effects 
instead of (or worse, in addition to) just taking the ingredients and 
mixing them up into a composite thing makes the concept of string 
templates more complicated.  While we can't prevent people from sneaking 
side effects into their template processors, we shouldn't encourage 
this, or suggest that all users have to work this into their mental model.

So its possible, but I don't think its a good direction for the language.



On 2/6/2024 11:54 AM, Ian Darwin wrote:
>
> In JEP 445 you wrote:
>
>> The changes we offer here are just one step in making Java easier to 
>> learn. They do not even address all the speed bumps in the above 
>> /Hello, World!/ program: The beginner may still be puzzled by the 
>> mysterious |System.out.println| incantation, and still needs to 
>> import basic utility classes and methods for essential functionality 
>> even in first-week programs. We may address these pains in a future JEP.
> While experimenting with the String Template feature, it occurs to me 
> that a relatively simple expansion of String Templates would pave over 
> another of those speed bumps. Basically:
>
>     PRINT."Hello \{name}. Your balance is \{amount}";
>
> Indeed, the beginner who hasn't yet met string templates can use the 
> degenerate case
>
>     PRINT."Hello world";
>
> and then later "need not discard what they learned in the early 
> stages, but rather they see how it all fits within the larger picture."
>
> This compares favorably with, e.g., Python 3's
>
> print('Hello world') and
>
> print(f'Hello {name}, your balance is {balance}')
>
> This seems like a fairly obvious extension, so I ask: Do you already 
> have such a thing up your collective sleeves or, if not, do you think 
> it might be grounds for a JEP proposal?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20240206/afb04493/attachment-0001.htm>


More information about the amber-dev mailing list