<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Received on the -comments list.<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">Begin forwarded message:</div><br class="Apple-interchange-newline"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">From: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Fred Curts <<a href="mailto:fred.curts@icloud.com" class="">fred.curts@icloud.com</a>><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Subject: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><b class="">Raw string literals: learning from Swift </b><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Date: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">January 11, 2019 at 2:15:10 PM EST<br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">To: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><a href="mailto:amber-spec-comments@openjdk.java.net" class="">amber-spec-comments@openjdk.java.net</a><br class=""></span></div><br class=""><div class=""><div class="">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.<br class=""><br class=""><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md</a> <<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md</a>> (implemented in Swift 5)<br class=""><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md</a> <<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md</a>> (implemented in Swift 4)<br class=""><a href="https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286" class="">https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286</a> <<a href="https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286" class="">https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID286</a>><br class=""><br class="">Here is what I like about Swift's string literals. In no particular order:<br class=""><br class="">1. Multi-line and raw string literals are orthogonal features.<br class="">(Try adding a literal dollar sign to a Kotlin multi-line string literal and you'll know what I mean.)<br class=""><br class="">2. Custom string delimiters solve all the use cases for raw string literals but nevertheless support escape sequences and interpolation expressions.<br class="">I've personally come across this need many times when trying to build larger regular expressions or code snippets out of smaller ones.<br class=""><br class="">3. Escape sequences and interpolation expressions use the same escape character.<br class="">This simplifies matters considerably, in particular once custom string delimiters are added to the mix.<br class="">(Having multiple custom escape characters would be too much.)<br class=""><br class="">4. Multi-line string literals are delimited by triple double quotes.<br class="">This makes them visually compatible with but heavier than single-line string literals, which seems like a good fit.<br class="">Distinct delimiters for single-line and multi-line string literals seem like a win for both humans and parsers.<br class="">For example, it's easy to tell where the missing end quote of a single-line string literal belongs.<br class=""><br class="">5. It's easy to control line indentation of multi-line string literals and leading and trailing whitespace of the entire string.<br class="">All of this is settled at compile time.<br class=""><br class="">6. Opening and closing delimiters of multi-line string literals must be on their own line.<br class="">This avoids headaches with edge cases such as string literals ending with two double quotes.<br class=""><br class="">7. Multi-line string literals with custom string delimiters can contain arbitrarily long sequences of double quotes.<br class=""><br class="">I hope I've convinced you that the design of Swift's string literals is worth a closer look.<br class=""><br class="">-Fred</div></div></blockquote></div><br class=""></body></html>