<div dir="ltr">On Mon, Jun 20, 2016 at 8:58 PM, John McCall via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span class=""><blockquote type="cite"><div>On Jun 20, 2016, at 5:22 PM, Jordan Rose via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><div><div style="word-wrap:break-word"><div>IIRC, some languages <i>require</i> zero-width joiners (though not zero-width spaces, which are distinct) to properly encode some of their characters. I&#39;d be very leery of having Swift land on a model where identifiers can be used with some languages and not others; that smacks of ethnocentrism.</div></div></div></blockquote><div><br></div></span>None of those languages require zero-width characters between two Latin letters, or between a Latin letter and an Arabic numeral, or at the end of a word.  Since standard / system APIs will (barring some radical shift) use those code points exclusively, it&#39;s justifiable to give them some special attention.</div></div></blockquote><div><br></div><div>Although the practical implementation may need to be more limited in scope, the general principle doesn&#39;t need to privilege Latin letters and Arabic numerals. If, in any context, the presence or absence of a zero-width glyph cannot possibly be distinguished by a human reading the text, then the compiler should also be indifferent to its presence or absence (or, alternatively, its presence should be a compile-time error).</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div></div><div>John.</div><div><div class="h5"><div><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div><br></div><div>Jordan</div><div><br></div><br><div><blockquote type="cite"><div>On Jun 20, 2016, at 10:51, João Pinheiro via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div>Recently there has been a screenshot going around Twitter about C++ allowing zero-width spaces in variable names. Swift also suffers from this problem which can be abused to create ambiguous, misleading, and potentially obfuscate nefarious code.<br><br>I would like to propose a change to prohibit the use of invisible characters in identifier names.<br><br>I&#39;m including an example of problematic code at the bottom of this email.<br><br>Sincerely,<br>João Pinheiro<br><br><br>/* The output for this code is:<br> A<br> B<br> C<br> 1<br> 2<br> 3<br> */<br><br>func test() { print(&quot;A&quot;) }<br>func t​est() { print(&quot;B&quot;) }<br>func te​st() { print(&quot;C&quot;) }<br><br>let abc = 1<br>let a​bc = 2<br>let ab​c = 3<br><br>test()<br>t​est()<br>te​st()<br><br>print(abc)<br>print(a​bc)<br>print(ab​c)<br>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></div></blockquote></div><br></div>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div><br></div></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div>