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

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

   To: ll1-discuss@ai.mit.edu
   Subject: elit.el, a listing generator in the spirit of "@"
   From: Luke Gorrie <luke@bluetail.com>
   X-Sincerity: 14% (approx.)
   Date: 07 Apr 2003 23:21:47 +0200
   User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
   Ahoy there,
   I liked the style of the program listing in the appendix of the RABBIT
   compiler thesis, said to be generated by a program called "@", so I
   wrote a clone of it. The program is called elit, written in Emacs
   Lisp, and posted to gnu.emacs.sources here:
   Since there are a lot of @-era MIT hackers on this list, I wonder if
   someone knows some useful tips and features about @ that they would
   like to share?
   I'd especially like a copy of the source code (and/or formatted
   listing) for @, if someone still has it.

Pretty cute!  I like the elit tool.  However, I note that

(a) The one feature of the RABBIT listing *not* performed
    by @ was placing prose commentary and code on facing
    pages!  I did that part by hand when I assembled the
    dissertation.  But I'm glad you liked that aspect of
    the presentation---it was novel at the time.

(b) The purpose of @ was to add the page and line numbers,
    as well as to generate all kinds of printed cross-reference
    information and to print incremental listings.

In those days, the 1970s, standard operating procedure was
to have a complete paper listing of each important program.
Corrections would be entered in the listing by hand; this also
served as the synchronization lock when more than one person
was working on a program---whoever had the listing owned the file.
Eventually changes would be copied from the listing into
the file.  Printing a new listing on a line printer took
a while, so we might use a different color of ink for each
set of corrections, delaying making a new listing until four
or five sets of changes had been made.

When the XGP came along (early laser printer prototype),
printed listings were suddenly on separate pages rather than
fanfold paper.  We would 3-hole punch them and put them
into binders.  Richard Stallman figured out that the @ program
could easily keep a hashed database of every page and print
out only the pages that had changed, along with directions
explaining exactly which pages to put in which binder,
and which to remove, to update the printed listing.  That
was an incremental (or comparison) listing.

The @ program didn't just list the code; it parsed it, and
figured out which occurrences of symbols were definitions
and which were references, then printed various kinds of
cross-reference information.  Most of that I suppressed in
the RABBIT listing in the dissertation, but at the end of
the dissertation you'll see an index that was generated
by @; and at the bottom of page 1 of the code listing you
will find four "@DEFINE" declarations that are there solely
to provide the @ program within information about macros
that define names so that @ can parse the code and generate
that symbol table correctly.

For more information about @, see


I'm not sure whether I have a program listing of @;
but, be warned, it would be a few hundred pages of
(well-commented) PDP-10 assembly language.  Do you
speak that ancient tongue?

--Guy Steele