Raw string literals -- where we are, how we got here

Brian Goetz brian.goetz at oracle.com
Wed Mar 28 20:24:16 UTC 2018


My apologies, I left out one additional known limitation: raw string 
literals that start or end with tick.  There are numerous workarounds, 
none of which are beautiful, such as:

     String s = `` `foo` ``.trim();
     String s = TICK + `foo` + TICK;

> ## Anomalies and puzzlers
>
> While the proposed scheme is lexically very simple, it does have some 
> at least one surprising consequence, as well as at least one restriction:
>  - The empty string cannot be represented by a raw string literal 
> (because two consecutive ticks will be interpreted as a double-tick 
> delimiter, not a starting and ending delimiter);
>  - String containing line delimiters other than \n cannot be 
> represented directly by a raw string literal.
>
> The latter anomaly is true for any scheme that is free of embedding 
> anomalies (escaping) and that normalizes newlines.  If we chose to not 
> normalize newlines, we'd arguably have a worse anomaly, which is that 
> the carriage control of a raw string depends on the platform you 
> compiled it on.
>
> The empty-string anomaly is scary at first, but, in my opinion, is 
> much less of a concern than the initial surprise makes it appear.  
> Once you learn it, you won't forget it -- and IDEs and compilers will 
> provide feedback that help you learn it.  It is also easily avoided: 
> use traditional string literals unless you have a specific need for 
> raw-ness.  There already is a perfectly valid way to denote the empty 
> string.
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20180328/78aa7a21/attachment.html>


More information about the amber-spec-experts mailing list