<!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....&nbsp;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>&nbsp;</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>