Guy Steele and Emacs - was Re: Classic programming
toby at telegraphics.com.au
Sun Aug 9 11:27:15 CDT 2015
On 2015-08-09 11:25 AM, Noel Chiappa wrote:
> > From: Eric Christopherson
> > people who like to program in languages or language implementations or
> > libraries that are no longer in common mainstream use?
> I prefer to write code under (effectively) V6 Unix; I find that I can get
> things working and done faster there than in any other environment. Of course,
> if one sticks to just the Standard I/O library, you can get more or less than
> same environment pretty much everywhere: Windows, Linux, etc.
> > From: Sean Conner
> > My current Holy Grail piece of software would be Synthesis OS---an
> > operating system written in assembly (in 1991) that can recompile and
> > specialize itself on the fly ---basically, a program can request and get
> > custom system calls to use.
> > ...
> >  http://valerieaurora.org/synthesis/SynthesisOS/
> Wow. I had a look at that site: Very Very Very Cool.
> Is source still extant anywhere? (I know, I could email the creator...)
> Also, ISTR a post which talked about Guy Steele working on EMACS. I don't
> think that can be correct - Guy had, IIRC, departed MIT before I got to Tech
> Sq, and EMACS had just started being developed when I got there.
Peter Siebel's "Coders at Work" features a chapter/interview with Steele:
Siebel: During your time at MIT you were somehow involved in the birth
of Emacs. But the early history of Emacs is a hit hazy. What is your
version of the story?
Steele: My version of the story was that I was playing standards guy.
What had happened was there was this display mode that turned TECO into
something like a WYSIWYG editor. On our 24x80 screens, 21 lines of what
was in the buffer would be shown on the screen and the bottom 3 lines
were still a TECO command line. You'd be typing in these TECO commands
and only when you hit the double altmode would they then be executed.
Then there was the real-time edit mode, where it was suggested that a
TECO command throw you in this other mode whereby instead of waiting for
you to type the double altmode, TECO would react immediately to single
character commands. If you type one character, it would do the command.
You type another character, it would do the command. And most printing
characters were self-inserting. Then the control characters were used to
move forward, back, up, and down. It was a very, very primitive---it
looked like a very primitive version of Emacs.
Then came the breakthrough. The suggestion was, we have this idea of
taking a character and looking it up in a table and executing TECO
commands. Why don't we apply that to real-time edit mode? So that every
character you can type is used as a lookup character in this table. And
the default table says, printing characters are self-inserting and
control characters do these things. But let's just make it programmable
and see what happens. And what immediately happened was four or five
different bright people around MIT had their own ideas about what to do
with that. Within just a few months there were five completely
incompatible GUI interfaces to TECO.
Seibel: So they were just customizing, essentially, the key-bindings?
Steele: That's right. And they each had their own ideas about what
should be concise because you do it most often and what you can afford
to be longer. So one guy, for example, was really concerned about typing
in Lisp code and began to experiment with finding balanced parenthesized
expressions. And another guy was more interested in text, so he was
interested in commands that would move over words and convert between
uppercase and lowercase and capitalize them. And that's where those
commands in Emacs came from.
Different people had different ideas about how the key-bindings ought to
be organized. As a systems-support guy for Lisp, I was often called to
people's terminals and asked to help them. And I fairly quickly noticed
that I couldn't sit down at their TECOs and help them modify their
programs because I'd be faced with a set of key-bindings and I had no
idea what they were going to do.
Seibel: Was one of those guys Richard Stallman?
Steele: No, Stallman was the implementer and supporter of TECO. And he
provided the built-in real-time edit mode feature, although I think Carl
Mikkelsen had worked on the early version of it. He provided the
key-bindings feature that made all of this possible.
Anyway, there were something like four different macro packages and they
were incompatible, and I decided to play standards guy, or community
reconciliation guy. I saw something that had been lost in our community,
which was the ability to easily help each other at our terminals. I
said, "OK, we've had some experimentation; we've seen a bunch of ideas.
What if we could agree on a common set of key-bindings and draw the best
ideas from each of these things?"
I literally had a pad of paper and ran around the building, talking to
these guys, visiting each of them several times, and tried to get some
kind of consensus. I was trying to get consensus on what the content
ought to be and then I drew on their designs and tried to organize the
actual choice of key-bindings so as to make them a little more regular
and a little more mnemonic. And not being a human-factors guy at all, I
didn't think at all about convenience for touch typists. I was
principally concerned with mnemonic value. And so that's why Meta-C and
Meta-L and Meta-U stand for capitalize and lowercase and uppercase.
Seibel: So you made this standard set of key-bindings. How did that go
over? Were people happy with it?
Steele: Well, people worked through it. Then I sat down and proceeded to
begin an implementation of it. And we had another idea that came into
the mix at the same time and it was the idea that you could make TECO
macros run a lot faster if you squeezed out the spaces and deleted all
the comments. The way the TECO interpreter worked, interpreting one
character at a time, when you encountered a comment it had to spend the
time skipping over that comment. So we had this idea of this very
primitive TECO compiler that was mostly just squeezing out the white
space and the comments and doing a few other minor things to put it in a
form that would run a little bit faster.
So I began in an initial way to try to construct a version of this macro
compressor, which I think was actually based on an earlier idea that
Moon had had. I don't think I originated that idea. I began to think
about how to organize the initial dispatch and organize some of the
first few routines borrowing on the existing implementations of other
macro pckages---I was trying to synthesize them. And about that point
Stallman came along and said, "What are you doing? This looks
interesting." He immediately jumped in and he could implement ten times
as fast as I could, partly because he knew TECO inside out.
So I worked seriously on the implementation of Emacs probably for only
about four or six weeks. At which point it became clear that Stallman
understood what the program was. I wanted to get back to doing
graduate-student things. So Stallman did the other 99.999 percent of the
work. But I played a role in catalyzing it and beginning the implementation.
> As to who actually did do EMACS, it was a cast of characters, and I wasn't
> enough part of it to know who should be listed. RMS was, of course, primus
> inter pares, but there were others. E.g. I remember Gene Cicarelli did
> some stuff.
> There was this thing called IVORY which IIRC 'purified' TECO code so that it
> could be dumped out in a compressed form (for faster loading, execution, etc
> - it may have also been possible to have it read-only, and the page(s) shared
> between multiple EMACS instances, but my memory is foggy on this), and Gene
> did that.
More information about the cctech