[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: elit.el, a listing generator in the spirit of "@"

   Date: Tue, 08 Apr 2003 17:26:44 -0500
   From: Trevis Rothwell <tjr@acm.org>
   To: Guy Steele - Sun Microsystems Labs <Guy.Steele@sun.com>
   CC: ll1-discuss@ai.mit.edu
   Subject: Re: elit.el, a listing generator in the spirit of "@"
   I might be asking for a very bright flash of the obvious, but why was
   this program called @ ?

Before @ was a standalone program, it was part of TECO,
the text editor widely used at MIT.  In MIT TECO syntax
(which used many single-character commands), the command
to produce an "assembly listing" of a file was the
character "@".

I was the one who decided to rewrite the code from scratch
as a standalone program, partly because I wanted to add
substantial new facilities, such as the ability to list
many files at once and provide inter-file cross-references.
On the one hand, I didn't want all this extra code to
consume address space within TECO, which would have
restricted the size of files that could be edited; on the
other hand, these new cross-reference facilities needed
lots of table space.  So splitting off a separate program
seemed to be the way to go.  (Later Stallman got into the
act, as he often did with the MIT AI software, nearly always
for the better.  The comparison listing facilities were
entirely his idea and doing.)

I chose to keep the name "@", not only for the historical
connection, but for a stupid practical reason.  It was
customary to give commonly-used programs single-letter
abbreviations, so that they could be invoked with just
two keystrokes (the second being ^K (control-K), which
was the DDT command for "run a program", as should be
patently obvious :-).  So either LISP^K or L^K would run LISP,
PEEK^K or P^K would run PEEK, and so on.  One could also use
command-line syntax, and type :LISP<return> or :L<return>,
but that would take three keystrokes instead of two, and so
was only used when you wanted to provide command-line arguments
before the <return>.

The single-letter abbreviations came from a fairly limited
namespace (26 possibilities) and therefore were a precious
resource.  I took note of the fact that it would never make
sense to run the listing program without command-line arguments,
because it was not designed to be interactive, so if I had
called it, say, ATSIGN then A^K would never be used.
But DDT had the peculiar property that, although @^K was
syntactically incorrect because @ is not an alphabetic letter,
the command-line form :@<arguuments><return> worked just fine.
So by calling the program "@", we were able to assign a
single-character name that could be used in command-line form
without using up one of the 26 letters that could be used
in x^K form.

Back in the dark ages we thought stuff like this really mattered!