[Python-Dev] Draft Guide for code migration and modernation

Guido van Rossum guido@python.org
Tue, 04 Jun 2002 10:32:01 -0400


> > Hm, but repr() was the wrong thing to call here anyway. :-(
> 
> The old code used `x`. Should we change it to use str()?

Can't do that, it's an incompatibility.  In a module of mostly
historic importance, it doesn't make sense to change it incompatibly.

> > Would it hurt to make them spaces in ASCII
> > too?
> 
> stringobject.c::string_isspace() currently uses the isspace()
> function from <ctype.h>.

I guess we'll have to live with this difference.  There's not much
harm, since nobody uses these anyway.

> grep "\[[[:space:]]*-[[:digit:]]*[[:space:]]*:[[:space:]]*\]" | grep "=="
> grep "\[[[:space:]]*:[[:space:]]*[[:digit:]]*[[:space:]]*\]" | grep "=="
> 
> This doesn't find "foobar"[-len("bar"):]=="bar", only constants.
> 
> But at least it's a little better than vgrep. ;)

Doesn't answer my question.  I'm doubting the wisdom of including
these grep instructions (correct or otherwise :-) for several reasons:

(1) It doesn't catch all cases (regexes aren't powerful enough to
    match arbitrary expressions)
(2) This recipe is Unix specific
(3) (Most important) it encourages "peephole changes"

By "peephole changes" I mean a very focused search-and-destroy looking
for a pattern and changing it, without looking at anything else.  This
can cause anachronistic code, where one line is modern style, and the
rest of a function uses outdated idioms.  IMO that looks worse than
all old style.  It can also cause bugs to slip in.  In my
recollection, every time someone went in and did a sweep over the
standard library looking for a particular pattern to fix, they
introduced at least one bug.

I much prefer such modernizations to be done only when you have a
reason to look at a particular module anyway, so you really understand
the code before you go in.

--Guido van Rossum (home page: http://www.python.org/~guido/)