<div dir="ltr"><div class="gmail_extra"><div><div class="gmail_signature"><div dir="ltr"><div>On Sun, Sep 18, 2016 at 6:34 PM, Robert Widmann <span dir="ltr">&lt;<a href="mailto:devteam.codafi@gmail.com" target="_blank">devteam.codafi@gmail.com</a>&gt;</span> wrote:<br></div></div></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>Some thoughts</div><br><div><span class="gmail-"><blockquote type="cite"><div>On Sep 18, 2016, at 3:33 PM, Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div dir="ltr"><div><div><div dir="ltr"><div><div><b>TL;DR:</b></div><div><br></div><div>Swift 4 Stage 1 seeks to prioritize &quot;Source stability features&quot;. Most source-breaking changes were done with in Swift 3; however, the categorization of Unicode characters into identifiers &amp; operators was never thoroughly discussed on swift-evolution. This seems like it might be our last chance, and I think there are some big improvements to be had.</div><div><br></div><div>I&#39;ve gathered some information+thoughts into an early-stage pitch / pre-proposal. It doesn&#39;t really have a conclusion, so I&#39;m hoping we can discuss these issues and come up with good (pragmatic) solutions here. I imagine this can morph into a proposal later.</div><div><br></div><div>You can read the following in nicer HTML form at <a href="https://gist.github.com/jtbandes/c0b0c072181dcd22c3147802025d0b59" target="_blank">https://gist.github.com/<wbr>jtbandes/<wbr>c0b0c072181dcd22c3147802025d0b<wbr>59</a></div><div><br>I look forward to the discussion!<br></div><div><br></div><div>-Jacob</div><div><font size="4"><br></font></div><div><b><font size="4"># Background and motivation</font></b></div><div><br></div><div>To ease lexing/parsing and avoid user confusion, the names of custom identifiers (type names, variable names, etc.) and operators in Swift can be composed of (mostly) separate sets of characters.</div><div><br></div><div>Using terminology from TSPL:</div><div><br></div><div>`identifier-head`/`operator-<wbr>head` are characters which can <i>begin </i>an identifier or operator.</div><div><br></div><div>`identifier-character`/`<wbr>operator-character` are characters which can appear anywhere in an identifier or operator (these are supersets of the `-head` sets).</div><div><br></div><div>&lt;<a href="https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/LexicalStructure.html" target="_blank">https://developer.apple.com/<wbr>library/content/documentation/<wbr>Swift/Conceptual/Swift_<wbr>Programming_Language/<wbr>LexicalStructure.html</a>&gt;</div><div><br></div><div>(Note also that some particular arrangements of characters are reserved; for instance, `$` followed by digits for an implicit closure parameter, and &quot;If an operator doesn’t begin with a dot, it can’t contain a dot elsewhere.&quot; There are also special characters in the language which are neither identifiers nor operators, such as: `()[]{},:@#`)</div><div><br></div><div><br></div><div><b>## Prior discussion on swift-evolution</b></div><div><br></div><div><b>&quot;Request to add middle dot (U+00B7) as operator character?&quot;</b></div><div>&lt;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/003176.html" target="_blank">https://lists.swift.org/<wbr>pipermail/swift-evolution/<wbr>Week-of-Mon-20151214/003176.<wbr>html</a>&gt;</div><div><br></div><div><b>&quot;Free the &#39;$&#39; Symbol!&quot;</b></div><div>&lt;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151228/005133.html" target="_blank">https://lists.swift.org/<wbr>pipermail/swift-evolution/<wbr>Week-of-Mon-20151228/005133.<wbr>html</a>&gt;</div><div><br></div><div><b>&quot;Proposal: Allow Single Dollar Sign as Valid Identifier&quot;</b></div><div>&lt;<a href="https://github.com/apple/swift-evolution/pull/354" target="_blank">https://github.com/apple/<wbr>swift-evolution/pull/354</a>&gt;</div><div><br></div><div><br></div><div>Chris Lattner has said:</div><div><br></div><div>&gt; &quot;...our current operator space (particularly the unicode segments covered) is not super well considered.  It would be great for someone to take a more systematic pass over them to rationalize things.&quot;</div><div><br></div><div>&gt; &quot;We need a token to be unambiguously an operator or identifier - we can have different rules for the leading and subsequent characters though.&quot;</div><div><br></div></div></div></div></div></div></div></blockquote><div><br></div></span><div>I feel a bit bad having implemented the patch that banned this - it feels like dollar was mistakenly left out of the operator character range considering how well it worked in operators up to then.  Disambiguation with respect to other language constructs (anonymous parameters in closures and LLDB variables) is trivial and we already had diagnostics about it.</div></div></div></blockquote><div><br></div><div>But more importantly, you were also the one who first asked for it to be an operator character :-)  <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151228/005133.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151228/005133.html</a></div><div><br></div><div>Did you have a formal proposal in the works for this? If so, it might be worth reviewing separately from any other changes. $ is a more well-known character, and probably more likely to elicit opinions than some more obscure Unicode stuff.</div></div></div></div>