It's explained if you look at the proposals: They wanted to avoid any and all risks of backwards compatibility with any existing templating tool in the Java ecosystem. Every sensible syntax was covered by one of those, so the core language is stuck with the least bad one available.
Re:Java 21 Released
by _old_dude_ on Tuesday September 19, 2023 @11:07AM
(#37570989)
It's prefixed by "STR." so the syntax is different from any existing tools ?
It remember me the first proposed syntax for lambdas. Let's hope the next preview will fix that.
Re:Java 21 Released
by paulddraper on Tuesday September 19, 2023 @10:57AM
(#37570832)
...at what cost tho
Re:Java 21 Released
by capableweb on Tuesday September 19, 2023 @11:32AM
(#37571398)
The JEP makes it kind of clear:
> trading off a small amount of convenience to gain a large amount of safety
Re:Java 21 Released
by paulddraper on Tuesday September 19, 2023 @11:50AM
(#37571716)
*large
*small
You can create json and sql string template processors that suffer from no injection problems. I'd call that a large improvement over, for example, Javascript. But I'm not familiar enough with the string template feature in the other languages to comment on their relative security.
Re:Java 21 Released
by paulddraper on Tuesday September 19, 2023 @01:08PM
(#37572978)
> You can create json and sql string template processors that suffer from no injection problems. I'd call that a large improvement over, for example, Javascript.
Bad example. JavaScript literally has that. [1]
function sql(strings, ...args) {
// ...
}
sql`SELECT * FROM user WHERE email = $1`
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Re:Java 21 Released
by 5e92cb50239222b on Tuesday September 19, 2023 @01:01PM
(#37572873)
This is a solved problem in .NET, and C# only has one kind of string templating:
FormattableString foo = $"select * from {table} where {column} = 42";
https://learn.microsoft.com/en-us/ef/core/querying/sql-queri...
C# $"{x} plus {y} equals {x + y}"
Visual Basic $"{x} plus {y} equals {x + y}"
Python f"{x} plus {y} equals {x + y}"
Scala s"$x plus $y equals ${x + y}"
Groovy "$x plus $y equals ${x + y}"
Kotlin "$x plus $y equals ${x + y}"
JavaScript `${x} plus ${y} equals ${x + y}`
Ruby "#{x} plus #{y} equals #{x + y}"
Swift "\(x) plus \(y) equals \(x + y)"
And finally:
Java STR."\{x} plus \{y} equals \{x + y}"