String literals: some principles

Guy Steele guy.steele at
Mon Apr 29 15:48:05 UTC 2019

> On Apr 28, 2019, at 4:32 PM, Brian Goetz <brian.goetz at> wrote:
> . . .
> Looking ahead to the next round, we can build on this.  In the first round, we mistakenly thought that there was something that could reasonably be called a “raw” string, but this notion is a fantasy; no string literal is so raw that it can’t recognize its closing delimiter.  So “rawness” is really only a matter of degree.  

This is _almost_ true.  If a string is truly raw (that is, it can contain _anything_), then one absolutely cannot depend on recognizing the closing delimiter by examining what might be the raw content.

Put another way: one cannot determine how long the raw content is by examining it.  That’s a solid principle.

But there are other ways of determining how long it is.  All have this property in common: you have to know how long the content is before you begin to scan it.  And this leads to an obvious solution: you need a count of bytes up front.

The design currently under consideration can easily accommodate this, now or in the future: a raw string is an opening delimiter, then a byte count (say, expressed as a decimal integer), then a LineTerminator , then as many bytes as the count indicated, then a LineTerminator, then a closing delimiter (the last two are not really needed, but they look nice, satisfy user expectations, and provide some redundancy to help make sure the byte count was correct).


	String PrintableAscii = “””95
“””;                // no need to worry about that embedded backslash

	String LotsaQuotes = “””50
“””;                // the payload cannot be confused with the closing delimiter

	String LineNoise = “””16
”””;                // I pasted in ^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W here—not sure how it will render in your mail reader

The syntax could be further adjusted in arbitrary ways for added clarity: for example

	String PrintableAscii = “””RAW DATA (95 bytes):

Presumably an IDE could help you make sure the byte count is correct.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list