<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16735" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>When I was at MIT, the most popular language was
probably PL/1. This was a typically "ibmic" language, it did it all. Was it a
scientific language? Was it a business language? Was it a string-processing
language? Yes.</FONT></DIV>
<DIV><FONT face=Arial size=2>Assembly languages were also popular. There were
three main computing facilities: Multics, PDP/10 used in AI type research, and
IBM mainframes. I wrote a lot of PL/1 on Multics, and co-authored the Multics
APL system sold by Honeywell. APL was also popular. I wrote many thousands of
lines of IBM assembly language. On the PDP-10s of course Lisp, as well as its
assembler, was widely used. I don't think course 6.001 was around when I was
there; MIT didn't really have an introductory programming course. They assumed
you already knew how to program. A major early CS course was Donovan's 6.251 on
operating systems which made use of IBM360 assembler and PL/1.</FONT></DIV>
<DIV><FONT face=Arial size=2>My first job after graduation was with Digital
Equipment Corp (ironic because I hadn't used the DEC equipment while at MIT).
Everything there, from OSes to text editors to newspaper typesetting systems,
was written in assembly language. I was in a group that tried to bring
"structured programming" concepts to DEC. There was a lot of pushback from
engineers who liked the efficiency of assembler. A typical programming situation
was that there was a routine that people used, call it X. Now to save some
memory, code Y would not call X, it would directly jump to X (i.e., w/o saving a
return address on the stack), knowing that routine X would jump back to Y when
done. Or sometimes the return address was put in a register. (This was also
common on IBM mainframes, in which there was an instruction BALR R1,R2 which
would jump to the address held in register R2 while storing the address of the
next instruction following the BALR in register R1). </FONT><FONT face=Arial
size=2>Later on Z would be written and would want to call X, so now the code
would need modifying to use the stack for saving return addresses. But nobody
could easily find all the places to fix up, and bugs accumulated.... I saw
one piece of code that pushed 10 or so extra copies of the return address just
in case!</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>By the way it was fun meeting everybody Thursday
nite, jj, Aaron, Glen, Daryl, Wesley, Vicky, etc. I hope to see you all again
soon.</FONT></DIV>
<DIV><FONT face=Arial size=2>- Roderick Llewellyn</FONT></DIV></BODY></HTML>