[swift-evolution] multi-line string literals

Chris Lattner clattner at apple.com
Mon Dec 14 14:40:48 CST 2015


> On Dec 11, 2015, at 11:25 PM, Travis Tilley via swift-evolution <swift-evolution at swift.org> wrote:
> 
> You'd have to ask Chris Latter and Dmitri Gribenko, who are responsible for the lines in Lexer.cpp that prevent it: 
> 
> 
> 22610d5 <https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf>substantially improve error recovery for erroneous character and stri… <https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf>
> lattner <https://github.com/lattner> authored on May 20, 2013
> 1147	
> 1148	    // String literals cannot have \n or \r in them.
> 3bee330 <https://github.com/apple/swift/commit/3bee330e5068eb6ed4e825ff77b9e7615758eb47>Lexer: don't inf loop on an unterminated string literal near EOF <https://github.com/apple/swift/commit/3bee330e5068eb6ed4e825ff77b9e7615758eb47>
> gribozavr <https://github.com/gribozavr> authored on Aug 22, 2013
> 1149	    if (*CurPtr == '\r' || *CurPtr == '\n' || CurPtr == BufferEnd) {
> 22610d5 <https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf>substantially improve error recovery for erroneous character and stri… <https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf>
> lattner <https://github.com/lattner> authored on May 20, 2013
> 1150	      diagnose(TokStart, diag::lex_unterminated_string);
> 1151	      return formToken(tok::unknown, TokStart);
> 1152	    }
> 2f44c00 <https://github.com/apple/swift/commit/2f44c0038c5a53e6ee4bb8f0a0fec4c3bd5d79a2>Initial stab at implementing string literal interpolation for simple … <https://github.com/apple/swift/commit/2f44c0038c5a53e6ee4bb8f0a0fec4c3bd5d79a2>
> lattner <https://github.com/lattner> authored on May 4, 2012
> 1153	    
> 
> 
> On Sat, Dec 12, 2015 at 2:02 AM, Alex Gordon <alextgordon at gmail.com <mailto:alextgordon at gmail.com>> wrote:
> What is the reason that normal strings "..." don't support newlines? It's not traditionally seen in C-inspired languages, but it's hardly unusual outside that sphere[*]. Ruby and HTML are probably the most common examples, but apparently OCaml and Lisps also allow it?

Among other reasons, Swift’s current behavior makes it straight-forward for the compiler to recover and handle the common error when you’ve forgotten to close a “.  If \n’s were allowed in simple string literals, then everything to the end of the file is included in the string, and the only mistake is the missing “.  This may seem like a minor thing, but matters a lot in an IDE context where you may have typed

 let x = “foo

and just haven’t finished typing, and the entire buffer changes color or something.

-Chris

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151214/eddcbb60/attachment.html>


More information about the swift-evolution mailing list