[Python-ideas] allow `lambda' to be spelled λ
Steven D'Aprano
steve at pearwood.info
Thu Jul 21 11:45:43 EDT 2016
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
More information about the Python-ideas
mailing list