[Date Prev] [Date Next] [Thread Prev] [Thread Next] Date Index Thread Index Search archive:
Date:Mon Sep 29 12:35:25 1993 
Subject:Re: Threaded Interpretive Languages 
From:Robin Popplestone 
Volume-ID:930929.04 

The zeitgeist works in mysterious ways... Actually I can explain the
development in terms of putting together ideas that were current in the early
'60's. My computing career began c. 1963 when I tried to program the
Manchester Atlas to solve word problems in group theory. After a course in
Mathematical Logic, from Robin Gandy, my horizons broadened to include proof
in general. For that, I was advised that -the- Compiler Compiler was just the
job. Well, the Compiler Compiler (implemented for the Atlas) turned out to be
inadequate, it built beautiful data-structures when it parsed logic sentences
in the grammar I had defined, but it built them -on the stack-. This was fine
for generating code in the rather shallow way the CC did (no prolonged mulling
over register allocation....) but of course useless for logic - these
beautiful data-structures vanished before I could do anything with them,
leaving me with a permanent suspicion of languages that relied over much on
the stack as a data-store.

So the 1964 summer school on "Non-Numerical Computing" in Oxford came as
something of a revelation to me. Landin and Strachey were there, explaining
about LISP, Algol and CPL. The main ideas I took away seem to have been (a)
reverse polish as an intermediate form (b) garbage collection of list
structures and (c) the importance of function variables to support higher
order functions. Given that I was now in Leeds, with an antique Pegasus
computer, a minimal mix of these components seemed called for, which I called
"Cowsel". Some trivia included the use of "hd" and "tl" instead of "CAR" and
"CDR" taken from Woodward's list-processing library in Algol.

I suspect that Moore, in developing Forth, had less the needs of symbolic
computing in mind. That would seem to be the primary difference between POP-1
and Forth.

Subsequent evolution has been divergent between POP and FORTH. The
observation, that you can associate immediate action with -user defined-
symbols, giving a kind of -macro- was, I think, made by Rod Burstall, and used
to support an extension of POP-1 that allowed infix forms. (He drew on
experience with the implementation of CPL - he had worked for a period
with Strachey in Oxford). Thus one could embellish POP-1 with various flavours
of extension. We -institutionalised- this in POP-2 [demonstrated on-line in
IFIP 68 at Edinburgh] with a defined syntactic form that supported infix
notation, whereas FORTH has not. Essentially the POP-2 compiler incorporated
an operator precedence grammar driven by "immediate action" identifiers. To
this day this architecture shows. For example user-defined operators can have
a range of precedences - easy to arrange with that kind of grammar, but hard
if you use say YACC.

Subsequent work in Edinburgh tended to focus on developing purer functional
languages (Hope and SML) and logic languages (Prolog). POP was taken up as a
teaching language by Aaron Sloman, and developed into POP-11 and Poplog at
Sussex University.

Who gets the right blend of technology for the time is -always- an interesting
question. One of the reasons this conversation is conducted in English is that
Queen Elizabeth the First's ship designers dispensed with superstructure
superfluous in a ship that was meant to carry big guns and not soldiers. The
other is that said guns were mounted on quaint little 4-wheeled thingies that
supported a much higher firing rate than King Philip's Armada could match...


Robin