[Python-3000] Support for PEP 3131

Talin talin at acm.org
Sun May 13 07:36:10 CEST 2007

Guillaume Proux wrote:
> Dear all,
> Pleased to meet you. I just subscribed to the list because I wanted to
> join the discussion regarding a specific PEP (for all the rest, you
> are all much more expert than me)
> Guido:
>> 3131 (non-ASCII identifiers) -- I'm leaning towards rejecting.
> I would like to voice my opposition to the rejection at that stage and
> request that more time is spent requesting/analysing the opinion of
> more people especially the people who have to deal with non-roman
> languages as a daily basis and especially people in the education
> field (along like other interesting people like the OLPC people)

One point that was raised by Alex Martelli is that the full set of 
Unicode 'letter' characters includes many characters which are visually 
indistinguishable in every font in the world. It means that, from now 
on, when I look at the variable named 'a', I can no longer be sure that 
what I am looking at is really the character I think it is. It means 
that we have introduced, for every Python programmer, a level of 
uncertainty that wasn't there before.

Programming languages are supposed to represent a compromise between the 
capabilities of humans and the capabilities of computers - in other 
words, both humans and computers are supposed to meet each other 
half-way and find a "sweet spot" that represents a restricted set of 
commands and symbols that both can understand. Each of them is expected 
to put a certain amount of effort into learning this common language - 
in the case of the computer, that effort is embodied into the design of 
the compiler, and in the case of the human, that effort is the learning 
of a formal dialect of commands and codes.

However, there is another use of programming languages, which is for 
programmers to communicate with each other. Specifically, the 
programming language provides a concise, unambiguous way to describe a 
particular algorithm or technique. Again, there is the expectation that 
practitioners of this discipline are expected to put a certain amount of 
effort into learning this formal language so that they can communicate 
with each other precisely.

The fact that programming languages resemble a particular human language 
is a pedagogical convenience, but it need not be so, and wasn't always 
that way. And the fact that a pidgin form of English words and grammar 
is used for most programming languages is a frozen accident, just as 
English is also the language used for international air traffic control. 
However, I think it is a mistake to think that programs themselves are 
written in "English", they are written in a formal language, similar to 
the language of mathematics, which every programmer needs to put in a 
modest amount of effort to learn, even native English speakers.

In any case, I would argue that if you teach someone to program in a 
dialect that cannot be understood by the global community of 
programmers, then you haven't really taught them 'programming' at all - 
you've taught them a kind of applied logic that they might be able to 
use personally, but that is only a small part of the craft of software 
engineering. The greater part is the ability to understand the vast 
corpus of literature out there that explains how to do just about 
everything you can think of with these tools. Only through learning a 
common language can they participate in the global technical 
infrastructure, which is more and more what I believe 'programming' is 

There is another issue to be considered as well: Many human languages 
have a different grammatical structure. Even if you were to allow 
non-ASCII identifiers, and more so even if you were to allow the 
keywords themselves to be localized, you still have the problem that 
'if' comes at the start of a sentence, which makes no sense in many 

-- Talin

More information about the Python-3000 mailing list