Larry Wall's comment on python...
James J. Besemer
jb at cascade-sys.com
Wed Sep 25 21:45:20 EDT 2002
sismex01 at hebmex.com wrote:
>>Ironically, Guido originally ruled (in the style guide, IIRC)
>>that thou shalt use tabs and tabs are 8 spaces, "as god
>>intentended them to be."
>Yeesh! Why in God's name would he say such a dumb thing?
>I mean, even ancient mechanical typewriters have movable
>tab settings. Rigid, 8-char tabs is just so... neolithical.
Once upon a time, a large class of computers, and their attendant
peripherals, OSs and utility programs universally implemented tabs
hard-wired at 8 stops. In some circles this heritage extended back 30
or 40 years. Unix originally followed this convention, as did IIRC all
Dec computers and that of most other "minicomputer" vendors. Ed and the
original VI editors only had fixed tab stops consistent with terminal
drivers and all the unit record equipment at the time. IIRC, even Emacs
originally only had tab stops at every 8 columns. The original PC also
followed this convention, though not all applications did. I don't know
for sure but I bet $1 that Linux tty drivers today also are hard wired
at 8 char tab stops.
Now, if you've ever worked in an environment where EVERYBODY uses the
same tab stops then you'd probably agree that tabs are vastly superior
to spaces. I don't think there's any question. I presume it's from
this perspective that the right honorable BDFL issued his original
proclamation, which is actually quite reasonable, especially from my old
In fact, problems only arise when alternative, competing tab stop
conventions try to coexist, which I agree is not generally solvable.
Closest solution I've seen is some sites where everybody uses Emacs and
employ coding conventions so that on startup Emacs can read a specially
coded comment and automatically switch to the proper indent for that
file. This can sort of work but your printer and other rendering
utilities also all have to recognize the codes. Spaces are a more
I myself still prefer tabs as I find "indenting" and "out denting"
sections of code to be a common operation (in Python and in other
languages). Inserting or removing an "if" or changing inline code to a
function makes indenting and out denting a common operation. In the
environments I use, this works well with tabs and not so well or at all
with spaces. By default, I still prefer 8 char stops but I also find I
can live just fine with 4. But I can't stand it without tabs. I'll
convert to spaces if I need to when delivering code but I can't work on
it that way.
Anyway, what's wrong with the "neolithical" 8 char stops? For several
decades, all the C code ever written was tab indented at 8 columns,
along with most of the text and other programming languages on Unix.
Some people complained that in practice 8 char tabs forced them to
indent too much and their programs got squashed off the right edge of
the page. I have little sympathy for that argument, as I feel if your
program is properly modularized then then this should not be much of a
problem as individual modules should not have to be indented all that
much. Also, I suspect part of the pressure came from Pascal users,
where some coding conventions require indenting two levels, once for the
begin/end pairs and again a second time for the code contained between
them. What a crock.
For what it's worth, Python's C implementation today appears to be tab
indented to 8 columns, at least all the parts I've looked at. The main
interpreter loop is a good example of a "complex" piece of code. The
innermost loop includes a single switch statement that's over 1400 lines
long! Surrounding logic require that the switch statement and case
labels start 2 tab stops in and thus the body of each case starts 3
stops in or in column 24. Yikes, that's like 1/3 of the total. And yet
none of the case bodies extend past column 73 or so. Turns out that in
practice most code lines are pretty short. The ones that aren't
typically are function calls with multiple arguments, and these may
easily be split onto multiple lines (often thereby increasing
readability). Since Guido personally wrote the bulk of this system as a
labor of love, I surmise that he's still pretty sentimental about the
James J. Besemer 503-280-0838 voice
2727 NE Skidmore St. 503-280-0375 fax
Portland, Oregon 97211-6557 mailto:jb at cascade-sys.com
More information about the Python-list