[Python-Dev] [slighly OT] Native speakers and hurting brains

Gareth McCaughan gmccaughan at synaptics-uk.com
Tue Jul 11 15:29:21 CEST 2006


(Attention conservation notice: the following is concerned almost entirely
with exegesis of an old python-dev thread. Those interested in improving Python
and not in history and exegesis should probably ignore it.)

On Tuesday 2006-07-11 13:43, Boris Borcic wrote:

> >> I believe that in this case native linguistic intuition made the decision...
> > 
> > The reason has nothing to do with language. Guido didn't
> > want sum() to become an attractive nuisance by *appearing*
> > to be an obvious way of joining a list of strings, while
> > actually being a very inefficient way of doing that.
> 
> sum() *is* exactly an attractive nuisance by *appearing* to be an obvious way of 
> chaining strings in a list (without actually being one).

It is a *short-term* attractive nuisance; anyone who tries it
will quickly find that it can't be used to "sum" strings;
whereas if this functionality of sum() had been retained
then users would much more readily have been led to use it
*and leave it in their programs*, to the detriment of their
efficiency.

> > Considerable effort was put into trying to make sum()
> > smart enough to detect when you were using it on a
> > list of strings and do "".join behind the scenes, but
> > Guido decided in the end that it wasn't worth the
> > trouble, given that he only ever intended sum() to
> > be used on numbers in the first place.
> 
> That's not quite conform to the record. According to py-dev archives it happened 
> on April 2003 with a thread "Fwd: summing a bunch of numbers (or "whatevers")" 
> initiated by Alex Martelli where he actually proposed a working implementation 
> of sum() in C, that did short-circuit the case of strings to ''.join. That was 
> Sat 19th of April.
> 
> Debate ensued, and by late Sunday 20th around 11PM;, the honorable author of the 
> Zen of Python had killed that use case for sum() with "sum(sequence_of_strings) 
> hurts my brain". (Hello Tim, so what about  < sqrt(':(') >  ?)

Hardly "killed", since discussion of sum(stringseq) continued after
Tim's comment, and since Tim was neither the only, nor the first, nor
(I think) the last, person to object to sum(stringseq).

> Guido's first intervention in the thread was the next morning, and the two very 
> first lines of his intervention where :
> 
> "OK, let me summarize and pronounce.
> 
>   sum(sequence_of_strings) is out...."
> 
> I admit that there is a step of arguable interpretation from these recorded 
> facts to my diagnostic, but the latter is compatible with the facts. Your 
> version otoh looks more robust in the role of eg creation myth.

Your interpretation is only "compatible with the facts" by means
of the hypothesis that Guido, despite saying "OK, let me summarize
and pronounce" (which, incidentally, was the *actual* opening of
that message, which was not Guido's first intervention in the
thread, but who cares about facts?), had only read Tim Peters's
message and not the rest of the thread. Including, for instance,
one of the last messages before Guido's, from Alex, reporting that
his sum() concatenated strings twice as slowly as ''.join. It also
requires one to ignore the fact that Guido said (in that same
message that you described as his "first intervention")

  |                       OTOH if we provide *any* way of providing a
  | different starting point, some creative newbie is going to use
  | sum(list_of_strings, "") instead of "".join(), and be hurt by the
  | performance months later.

and the fact that in Guido's *actual* "first intervention" he
said that he found sum(stringseq) "weird" and would continue to
use ''.join. (Remark: Guido is not a native speaker of English,
though he's a very competent one.) For that matter, Tim's
comment about sum(stringseq) hurting his brain was in direct
response to another part of that same message from Guido in
which he said that "the name sum() strongly suggests that it's
summing up numbers". (Remark: Guido still isn't a native speaker
of English.)

Perhaps the fact that "sum" isn't a natural English term for
concatenation of strings -- which, indeed, it isn't -- was one
of his reasons; it demonstrably wasn't the only one; and it
seems to have been the non-native speaker Guido himself who
introduced that consideration to the discussion.

It appears to me that your interpretation is difficult to reconcile
with the facts and is based on an incorrect and narrow reading of the
original texts. What was that you were saying about creation myths?

(I agree that Greg's interpretation is also not well supported
by that thread; I don't know whether Guido later said anything
that would determine how much truth there is in it. Since sum()
was Alex Martelli's invention, it seems unlikely that Greg's
quite right.)

-- 
g



More information about the Python-Dev mailing list