<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Just to add my point of view as language user. I don’t know so much about compilers and neither have many familiarity with language grammars. I like to &nbsp;learn, and this list helps.<div class=""><br class=""></div><div class="">I think clousures are strangely written and break some coherence. I agree with Alexander on that.</div><div class="">But I don’t like the proposed solution.</div><div class=""><br class=""></div><div class="">In the other side, I think trailing closures are a really a great feature, I like a lot.</div><div class="">But I feel it’s a bit confusing in some way, as Alexander pointed. As if it was the body definition of the called function.</div><div class=""><br class=""></div><div class="">To throw an idea, the <b class="">with</b> keyword:</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier New" class="">with ( &nbsp;<b class="">parameters</b> ) -&gt; <b class="">return_type</b> {</font></div><div class=""><font face="Courier New" class="">&nbsp; &nbsp; <b class="">statements</b></font></div><div class=""><font face="Courier New" class="">}</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""><br class=""></font></div></div><div class=""><div class=""><font face="Courier New" class="">sorted = names.sort( <b class="">with</b>(s1: String, s2: String) -&gt; Bool {</font></div><div class=""><font face="Courier New" class="">&nbsp; &nbsp; return s1 &gt; s2</font></div><div class=""><font face="Courier New" class="">})</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><div class=""><font face="Courier New" class="">sorted = names.sort( <b class="">with</b>(s1, s2){ &nbsp;return s1 &gt; s2 } )</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><div class=""><font face="Courier New" class="">reversed = names.sort( <b class="">with</b>(s1, s2){ s1 &gt; s2 } )</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><div class=""><font face="Courier New" class="">reversed = names.sort( { $0 &gt; $1 } ) &nbsp;&nbsp;</font></div><div class=""><font face="Courier New" class="">OR? reversed = names.sort( <b class="">with</b>{ $0 &gt; $1 } )</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""><br class=""></font></div></div></div></div><div class=""><font face="Courier New" class="">reversed = names.sort(&gt;)</font></div><div class=""><font face="Courier New" class="">OR? reversed = names.sort(<b class="">with</b> &gt;)</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><div class=""><font face="Courier New" class="">reversed = names.sort() &nbsp;<b class="">with</b> { $0 &gt; $1 } &nbsp; // I think clarifies it is an input to exeute not a definition</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><div class=""><font face="Courier New" class="">reversed = names.sort <b class="">with</b> { $0 &gt; $1 } &nbsp;// I think clarifies it is an input to exeute not a definition</font></div><div class=""><br class=""></div><div class=""><br class=""></div></div><div class="">Thanks!</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Daniel</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div apple-content-edited="true" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; orphans: 2; widows: 2;" class="">Daniel Valls Estella · tel. 659.910.830 ·&nbsp;<a href="mailto:daniel@upzzle.com" class="">daniel@upzzle.com</a></div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">El 22 des 2015, a les 7:57, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; va escriure:</div><br class="Apple-interchange-newline"><div class=""><div class="">Well, I'm actually happy with the current closure syntax as it allows very succinct simple cases and trailing closures as Chris has already pointed out.<br class=""><br class=""><blockquote type="cite" class="">Am 21.12.2015 um 23:44 schrieb Alexander Regueiro via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt;:<br class=""><br class="">Okay, I assume you are aware this essentially the same syntax as used in languages like C# and Python, yes? I’m not sure there are any problems in those languages with it.<br class=""><br class=""><blockquote type="cite" class="">If you dig through (very early) history you’ll see that we had this. &nbsp;There are a couple of problems with it:<br class=""><br class="">1) It punishes simple cases like “X.sort { $1 &lt; $0 }”, along with lots of simple map and filter closures.<br class=""></blockquote><br class="">Not really. The above example would just be `X.sort func { $1 &lt; $0 }” or "X.sort \ { $1 &lt; $0 }` in my proposed syntax. Also, it would be nice to have all operators implicitly<br class=""></blockquote><br class="">Having "func" or the backslash crammed in there is really ugly and unreadable IMHO.<br class=""><br class="">And in Haskell you don't have braces for the body to begin with and you would have to enclose the closure in parenthesis if it is part of an expression like your examples so in effect it would look quite similar, i.e. having the parameters within the parenthesis (sure, the semantics are different, but I made argument just to demonstrate that what looks good in one syntactic environment might not look good in another).<br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">2) It reads really weird in trailing closure cases.<br class=""></blockquote><br class="">Honestly, I strongly dislike trailing closures. I don’t think they add much, and moreover they use a confusing syntax that make the whole function call look superficially like a function declaration (or indeed the whole thing being a closure).<br class=""></blockquote><br class="">Trailing closures are a great feature IMHO because they make the code much more readable by allowing constructs to look similar to control flow statements.<br class="">This allows creating very readable DSLs.<br class=""><br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">Lets step back: What problems are you trying to solve with the current closure syntax?<br class=""></blockquote><br class="">Readability, mainly. I think this is a big improvement. <br class=""></blockquote><br class="">Well, I think it's the opposite for the simple cases and for trailing closures. <br class=""><br class=""><br class=""><blockquote type="cite" class="">Then there’s similarity with other languages, which is minor, but nice. I don’t know any language that uses a syntax like the current one of Swift.<br class=""></blockquote><br class="">Smalltalk and Ruby immediately come to mind and I'm sure there are others.<br class=""><br class="">Scala has a trailing closure syntax which is similar to Swift's syntax as well.<br class=""><br class="">-Thorsten <br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></div></blockquote></div><br class=""></div></body></html>