Wrapping up the first two courses

Jim Laskey james.laskey at oracle.com
Fri Apr 26 15:54:09 UTC 2019


I was interpreting \<Line Terminator> as "the line is to be continued" and \<Space> as "this is where the line continues". This interpretion provides the margin control that Guy was looking for.

String s = """
       \    This is the first bit
       \    and the second bit
       \    and the third bit
           """;
           
Result:
    This is the first bit
    and the second bit
    and the third bit

The string continues after the \<Space>, overriding the indentation control of that line.


Revisiting the other cases;

String s = """
           This is the first bit 
           and the second bit
           and the third bit
           """;
           
Result:
This is the first bit 
and the second bit
and the third bit

Default case.


String s = """
           This is the first bit \
           and the second bit \
           and the third bit
           """;

Result:
This is the first bit and the second bit and the third bit.

Not because the next line's white space was skipped after the \<Line Terminator>, but because of default align.


String s = """
           This is the first bit \
                \ and the second bit \
                \ and the third bit
           """;
           
Result:
This is the first bit and the second bit and the third bit.

Combining the two escapes.


> On Apr 26, 2019, at 12:31 PM, Kevin Bourrillion <kevinb at google.com> wrote:
> 
> On Thu, Apr 25, 2019 at 5:42 PM Brian Goetz <brian.goetz at oracle.com <mailto:brian.goetz at oracle.com>> wrote:
> 
> So what you’re saying is: with CDI, the opt out is: bring the closing delimiter to the left margin, done.
> 
> derp, thanks for completing my thought. Basically: some say "opt out" while I say "I choose to locate the left edge of my rectangle at the left edge of the actual source file". "Done" indeed.
> 
> 
> On Fri, Apr 26, 2019 at 6:25 AM Jim Laskey <james.laskey at oracle.com <mailto:james.laskey at oracle.com>> wrote:
> 
> The example that Kevin left to the imagination was;
> 
> 		String s = """
>     				some
>     			        lines go here
> """;
> 
> Which, while awkward, remains a natural progression of CDI, can be interpreted as heredoc, and no other indicator required.
> 
> I persistently forget that people will sometimes want to do that, to keep their content within their customary source file column limit. (I want to downplay the notion of pasteability because that's precisely a feature of raw strings, which this is not.)
> 
> 
> Other notion mentioned;
> 
> 	- \<Line Terminator> eats the terminator and continues on the next line.
> 
> Eats the terminator plus all leading whitespace of the next line, yes?  I had forgotten that the reintroduction of escapes opened up this possibility, and I think it's pretty great -- quite a substantial fraction (25%+ I think) of all our multiline use cases that we've found are things like long exception messages where they don't actually want the newlines, they just want to be free of dealing with the damn quote-plus-quote.
> 
> Oh, and quite a few of those use cases are in annotations like @FlagSpec({"--foo", "long help text about --foo"}), and I'm very happy that these are no longer excluded from indentation stripping.
> 
>  
> 		- I suppose we could have \<Space> to mean continue here
> 			- This could effective provide margin control
> 
> I have to catch up on this thread to figure out what this means.
> 
> I also need to catch up on the issue of what to do with the trailing newline. We can get data on how often our string literals seem to want interior newlines but no trailing one. It would be a bit surprising if the trailing newline is automatically chomped, but at least you have two very simple and obvious ways to restore it (add another line or add `\n`), whereas chomping via library is sad for several reasons (including excluding those @FlagSpecs I mentioned above).
> 
>  
>>> On Apr 25, 2019, at 8:19 PM, Kevin Bourrillion <kevinb at google.com <mailto:kevinb at google.com>> wrote:
>>> 
>>> I'm sure I'm not saying anything totally new in the following, but this is my summary of why I don't see the necessity of any explicit opt-out like \-.
>>> 
>>> Suppose I write this:
>>> 
>>> String s = """
>>>     some
>>>     lines go here
>>>     """;
>>> 
>>> And suppose I have learned to picture a rectangle whose left edge is the left edge of the ending delimiter.
>>> 
>>> Well, once I'm already picturing that rectangle based on the delimiter, then clearly if I leave the delimiter alone, that leaves the rectangle alone. I can change to
>>> 
>>> String s = """
>>>       some
>>>     lines go here
>>>     """;
>>> 
>>> ... to insert two spaces before `some`, and I can further change to
>>> 
>>> String s = """
>>>       some
>>>       lines go here
>>>     """;
>>> 
>>> ... to also insert two spaces before `lines`.
>>> 
>>> What is notable to me is that at no point did I ever change from one kind of string literal to another. There is no feature that I opted in or out of -- because there just doesn't need to be. That to me is a clear and compelling win for simplicity.
>>> 
>>> It's entirely possible this was all 100% clear already, in which case sorry!
>>> 
>>> 
>>> 
>>> 
>>> On Thu, Apr 25, 2019 at 4:30 PM Liam Miller-Cushon <cushon at google.com <mailto:cushon at google.com>> wrote:
>>> On Thu, Apr 25, 2019 at 8:56 AM Brian Goetz <brian.goetz at oracle.com <mailto:brian.goetz at oracle.com>> wrote:
>>> 
>>> > For 2/3, here’s a radical suggestion.  Our theory is, a “fat” string is
>>> > one that is is co-mingled with the indentation of the surrounding code, and
>>> > one which we usually wish the compiler to disentangle for us.  By this
>>> > interpretation, fat single-line strings make no sense, so let’s ban them,
>>> > and similarly, text on the first line similarly makes little sense, so
>>> > let’s ban that too.  In other words, fat strings (with the possible
>>> > exception of the trailing delimiter) must exist within a “Kevin
>>> > Rectangle.”
>>> >
>>> 
>>> +1
>>> 
>>> I thought Jim presented a good case for an exception for the trailing
>>> delimiter, but otherwise disallowing single-line 'fat' strings (single-line
>>> multi-line strings?) seems to mostly have upside.
>>> 
>>> For 4 (opt out), I think it is OK to allow a self-stripping escape on the
>>> > first line (e.g., \-), which expands to nothing, but suppresses stripping.
>>> > This effectively becomes a “here doc”.
>>> >
>>> 
>>> This seems OK to me too, but is there good return on complexity? Closing
>>> delimiter influence can also be used to opt out of stripping. Are there
>>> enough use-cases to justify a second opt-out mechanism? And does it have to
>>> be decided now, or could it be added later?
>>> 
>>> 
>>> -- 
>>> Kevin Bourrillion | Java Librarian | Google, Inc. | kevinb at google.com <mailto:kevinb at google.com>
> 
> 
> 
> -- 
> Kevin Bourrillion | Java Librarian | Google, Inc. | kevinb at google.com <mailto:kevinb at google.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20190426/c50dd2ad/attachment-0001.html>


More information about the amber-spec-experts mailing list