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