[comp.unix.questions] Stored Tabs Considered Harmful

tanner@ki4pv.uucp (Dr. T. Andrews) (12/18/88)

In <755@rabbit1.UUCP>, several propositions are made, to wit:
)    I.  HARDWARE EXPANSION OF TABS DURING OUTPUT ISN'T USEFUL
)   II.  STORING TABS IN FILES ISN'T USEFUL
)  III.  SUPPORT OF OF THE ABOVE INCREASES HARDWARE AND SOFTWARE COMPLEXITY
)	 AND IS THEREFORE COSTLY AND ERRORPRONE
)   IV.  TABS SHOULD BE EXPANDED ON INPUT IF DESIRED BY THE USER &
	 APPLICATION

The first point sounds reasonable to me, when I am hooked up on a
19.2K hard-wired terminal.  When I am dialed to a computer, I have
often appreciated the savings engendered by tabs on output.  What
more can I say than that for documents with lots of white-space,
I get eight times the output speed for the non-information-bearing
portion of the text?

The second point is bolstered by the assertion that disk storage is
becoming cheaper.  Consider, however, storage of C code.  The lines
may have more print positions filled by white-space than by actual
compilable code.  Something like "++blunge.gork" indented three
tabs either requires 24 spaces or 3 tabs in front of 14 characters.
Sure, disk space is cheaper.  Does that mean that we should double
our use of it for the same information?

Further, consider the case where you want to COMPILE that source
code.  Which is faster: ignoring three tabs, or ignoring 24 spaces?
Consider also that you have to read in the spaces or tabs; assuming
the same average I/O cost per character for spaces and tabs (is
read(2) data sensitive?), you have eight times the cost for the space
version.

The third point, software complexity, is granted.  You have to check
for '\t' as well as ' ' and '\f' when you decide if a character is
ignorable white space in the compiler.  Other applications have
similar added complexity.  So hide it: invent a routine iswhite() and
use it: your complexity is mostly hidden.

The fourth argument, "tabs should be expanded on input", is too
religious for me.

Supplied with the above points were some supporting arguments.
)  1.  THE DEFACTO INDUSTRY TAB STANDARD ISN'T THAT USEFUL
That's true.  A 4-char tab would have probably been better for
source indenting.  However, it's not that bad, either, and at
least we all agree to use 8-char tabs.

)  2.  TRANMISSION SAVINGS IS MINIMAL
I trust that anyone who has appreciated tab0 mode over a modem will
know how effectively this one is debunked.

)  3.  DUE TO LACK OF A REAL STANDARD, SOFTWARE COMPLEXITY INCREASES
But we \fBdo\fP have a real standard.  Those 8-char tabs you detested
in point one are a de-facto standard.  People use them.  I would
venture to say that the 8-char tabs are more of a standard than X3J11
ever will be!

)  4.  WHERE THE SOFTWARE OR HARDWARE SUPPORT IS INSUFFICIENT, ERRORS
) OCCUR OR ANY TRANSMISSION SAVINGS ARE LOST
True.  Of course, this applies to newlines and other carriage control
as well.  Some terminals don't under <ESC>=RC cursor-addressing.
There are things you can do about this.

)  5.  THE CONCEPT OF TAB STOPS DOESN'T MESH WITH FLEXIBLE COMPUTER USE
Sure, and we appreciate your example.  You want the source code to a
program which tabifies and untabifies?  Solves your problem nicely.

)  6.  ONLY MINIMAL SPACE SAVINGS WHEN TABS ARE STORED
Sure.  Like about 40% around here, based on my observations of
source files.  We use lots of indent.

)  7.  NO FLEXIBILITY IS GAINED
True.  That's the problem with a standard.  See 1 and 3.

CONCLUSION
My conclusion is that I appreciate the ability to store tabs in a
file, and to transmit over slow (eg <=2400) modem connections a
single tab character instead of 8 spaces.

I also appreciate the time saved in compiling tabified sources, and
the space saved by keeping my ".c" files tabified.
-- 
...!bikini.cis.ufl.edu!ki4pv!tanner  ...!bpa!cdin-1!cdis-1!ki4pv!tanner
or...  {allegra killer gatech!uflorida decvax!ucf-cs}!ki4pv!tanner