
On Wed, Jul 20, 2016 at 11:26:58PM -0700, Rustom Mody wrote:
А = 1 A = A + 1
because the A's look more indistinguishable than the sigmas and are internally more distinct If the choice is to simply disallow the confusables that’s probably the best choice
IOW 1. Disallow co-existence of confusables (in identifiers)
That would require disallowing 1 l and I, as well as O and 0. Or are you, after telling us off for taking an ASCII-centric perspective, going to exempt ASCII confusables? In a dynamic language like Python, how do you prohibit these confusables? Every time Python does a name binding operation, is it supposed to search the entire namespace for potential confusables? That's going to be awful expensive. Confusables are a real problem in URLs, because they can be used for phishing attacks. While even the most tech-savvy user is vulnerable, it is especially the *least* savvy users who are at risk, which makes it all the more important to protect against confusables in URLs. But in programming code? Your demonstration with the Latin A and the Greek alpha Α or Cyrillic А is just a party trick. In a world where most developers do something like: pip install randompackage python -m randompackage without ever once looking at the source code, I think we have bigger problems. Or rather, even the bigger problems are not that big. If you're worried about confusables, there are alternatives other than banning them: your editor or linter might highlight them. Or rather than syntax highlighting, perhaps editors should use *semantic highlighting* and colour-code variables: https://medium.com/@evnbr/coding-in-color-3a6db2743a1e in which case your A and A will be highlighted in completely different colours, completely ruining the trick. (Aside: this may also help with the "oops I misspelled my variable and the compiler didn't complain" problem. If "self.dashes" is green and "self.dahses" is blue, you're more likely to notice the typo.) -- Steve