I like it. There is an advantage to using a visually heavyweight character like ‘#’. If you don’t want to use that, I think ‘$’ would work.
(I considered ‘%’, but there are two problems: in familiar usage it occurs a lot in format strings (even more than ‘$’), and moreover in principle the string %” can already occur in a legitimate Java program (consider `myVar%”foobaz”.substring(k).length()`), but I think $” cannot.) I like that it leaves open a variety of escape constructions for possible future use. > On Jan 11, 2019, at 2:16 PM, Brian Goetz <brian.go...@oracle.com> wrote: > > Received on the -comments list. > >> Begin forwarded message: >> >> From: Fred Curts <fred.cu...@icloud.com <mailto:fred.cu...@icloud.com>> >> Subject: Raw string literals: learning from Swift >> Date: January 11, 2019 at 2:15:10 PM EST >> To: amber-spec-comme...@openjdk.java.net >> <mailto:amber-spec-comme...@openjdk.java.net> >> >> With Swift 5 recently adding custom String delimiters (also called raw >> string literals), I find the design of Swift's string literals very >> compelling, more so than other languages I've studied. >> >> https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md> >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md>> >> (implemented in Swift 5) >> https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md> >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md>> >> (implemented in Swift 4) >> https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286 >> >> <https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286> >> >> <https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286 >> >> <https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286>> >> >> Here is what I like about Swift's string literals. In no particular order: >> >> 1. Multi-line and raw string literals are orthogonal features. >> (Try adding a literal dollar sign to a Kotlin multi-line string literal and >> you'll know what I mean.) >> >> 2. Custom string delimiters solve all the use cases for raw string literals >> but nevertheless support escape sequences and interpolation expressions. >> I've personally come across this need many times when trying to build larger >> regular expressions or code snippets out of smaller ones. >> >> 3. Escape sequences and interpolation expressions use the same escape >> character. >> This simplifies matters considerably, in particular once custom string >> delimiters are added to the mix. >> (Having multiple custom escape characters would be too much.) >> >> 4. Multi-line string literals are delimited by triple double quotes. >> This makes them visually compatible with but heavier than single-line string >> literals, which seems like a good fit. >> Distinct delimiters for single-line and multi-line string literals seem like >> a win for both humans and parsers. >> For example, it's easy to tell where the missing end quote of a single-line >> string literal belongs. >> >> 5. It's easy to control line indentation of multi-line string literals and >> leading and trailing whitespace of the entire string. >> All of this is settled at compile time. >> >> 6. Opening and closing delimiters of multi-line string literals must be on >> their own line. >> This avoids headaches with edge cases such as string literals ending with >> two double quotes. >> >> 7. Multi-line string literals with custom string delimiters can contain >> arbitrarily long sequences of double quotes. >> >> I hope I've convinced you that the design of Swift's string literals is >> worth a closer look. >> >> -Fred >