<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=""><div><blockquote type="cite" class=""><div class="">On Apr 12, 2017, at 5:39 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">On Wed, Apr 12, 2017 at 5:20 PM, Brent Royal-Gordon <span dir="ltr" class="">&lt;<a href="mailto:brent@architechies.com" target="_blank" class="">brent@architechies.com</a>&gt;</span> wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Wow, maybe I shouldn't have slept.</div><div class=""><br class=""></div><div class="">Okay, let's deal with trailing newline first. I'm *very* confident that trailing newlines should be kept by default. This opinion comes from lots of practical experience with multiline string features in other languages. In practice, if you're generating files in a line-oriented way, you're usually generating them a line at a time. It's pretty rare that you want to generate half a line and then add more to it in another statement; it's more likely you'll interpolate the data. I'm not saying it doesn't happen, of course, but it happens a lot less often than you would think just sitting by the fire, drinking whiskey and musing over strings.</div><div class=""><br class=""></div><div class="">I know that, if you're pushing for this feature, it's not satisfying to have the answer be "trust me, it's not what you want". But trust me, it's not what you want.</div></div></blockquote><div class=""><br class=""></div><div class="">This is not a very good argument. If you are generating files in a line-oriented way, it is the function _emitting_ the string that handles the line-orientedness, not the string itself. That is the example set by `print()`:</div><div class=""><br class=""></div><div class="">```</div><div class="">print("Hello, world!") // Emits "Hello, world!\n"</div><div class="">```</div><div class=""></div></div></div></div></div></blockquote><div><br class=""></div><div>You say "this is the example set by `print`", but I don't think anything else actually *follows* that example. No other I/O operation in Swift behaves this way. The underlying `TextOutputStream.write(_:)` doesn't; the I/O in Foundation doesn't; file descriptor I/O doesn't. Concatenation certainly doesn't; nor does anything else you might do to assemble several multiline string literals into a whole. So I think `print()` is the exception here, not the rule.</div><div><br class=""></div><div>In my opinion, modulo the "newline after leading delimiter" question, if code like this example:</div><div><br class=""></div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>var xml = """</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &lt;?xml version="1.0"?&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &lt;catalog&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; """</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>for (id, author, title, genre, price) in bookTuples {</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; xml += """</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;book id="bk\(id)"&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;author&gt;\(author)&lt;/author&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;\(title)&lt;/title&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;genre&gt;\(genre)&lt;/genre&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;price&gt;\(price)&lt;/price&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/book&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &nbsp; &nbsp; """</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>}</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>xml += """</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; &lt;/catalog&gt;</div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>&nbsp; &nbsp; """</div><div class=""><br class=""></div><div class="">Doesn't assemble the kind of string that it's blatantly obvious the user is trying to assemble, I think the syntax has failed.</div><div class=""><br class=""></div><div class="">`print()` is the outlier. It's an important enough outlier that we should probably help the user notice when they're about to get it wrong, but an outlier it is.</div></div></div><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; font-variant-ligatures: normal; font-variant-east-asian: normal; font-variant-position: normal; line-height: normal; border-spacing: 0px;"><div class=""><div style="font-size: 12px; " class="">--&nbsp;</div><div style="font-size: 12px; " class="">Brent Royal-Gordon</div><div style="font-size: 12px; " class="">Architechies</div></div></span>

</div>
<br class=""></body></html>