[Python-Dev] [slighly OT] Native speakers and hurting brains (original) (raw)

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(sequenceofstrings) 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(sequenceofstrings) 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