From: ercm20@festival.ed.ac.uk (Sam Wilson)
Newsgroups: alt.folklore.computers
Subject: Re: That darn Bug story
Date: 30 Sep 92 13:39:05 GMT

magnus@THEP.LU.SE (Magnus Olsson) writes:
> In article <26322@castle.ed.ac.uk> ercm20@festival.ed.ac.uk writes:
> 					     ^
> 		Is this node named after the Edinburgh Festival?

Yep.  You'll be aware that in the UK we name our machines forwards (the
rest of the world names them backwards, of course!) and we also have two
forms of name, so what you see as festival.ed.ac.uk we tend to think of
as uk.ac.edinburgh.festival.  We also have uk.ac.edinburgh.castle,
uk.ac.edinburgh.rock (a kind of sweet) and uk.ac.edinburgh.fringe (the
less highbrow Festival that goes on around the official one).  We don't
yet have uk.ac.edinburgh.crystal (an ornamental glass factory) nor
uk.ac.edinburgh.district.council... 

> >Compared to all the languages I've seen discussed recently IMP seems to
> >suffer from the problems of almost none of them with the exception of
> >being a little verbose to type. 
> 
> [ Interesting description of some features deleted ]
> 
> This sounds interesting - could you possibly post some more details
> about this language? 

Shame I can't type in the manual! There was a description (part of a
series about EMAS and its development) in the Computer Journal in around
1974 ("The IMP Language and Compiler", P.D.Stephens, Computer Journal
vol 17 no 3 p216).  The language was initially designed in about 1966
based on Atlas Autocode, the languace of the Manchester Atlas machine
which was itself derived from Algol 60.  It was further developed and
several things were changed in the final version, IMP80: the form of the
counted cycle changed; the until clause of a conditional cycle moved to
the end of the loop (there is a while clause which can be placed at the
beginning); the syntax of record declarations changed; a nested
contingency handling feature introduced; numerical constants in
arbitrary bases were introduced; the string delimiter was changed from '
to " to allow easier distinction between a single character constant (an
integer type), say 'A' and string constants, say "A", which were
actually a structured type with a length byte; an so on and so on.

> ... And what do you think where the reasons for its
> not sufering from the problems of other languages?

By 'reasons' do you mean design criteria or features?  On the design
criteria front the designers made sensible choices that balanced the
need to be able to do almost anything with creating a readable,
maintainable language.  They specificially excluded features that would
be inefficient or difficult to implement on a range of different
architectures and eschewed cryptic abbreviations in favour of readable
things (for instance the effects of many of C's operators are achieved
with what in IMP are syntactically functions - the address of a variable
is taken with ADDR(variable-name); mapping a variable onto an address is
done with a mapping function, say INTEGER(address).)  They did however
allow assembler at any point in a program with access to IMP variables.

The sort of features I had in mind were nested procedure decalations,
separate compilation, the address and mapping functions referred to
above which allow the kind of thing everyone says C is so good at
without the cryptic syntax and byzantine precedence rules (and ensuring
that the built in assembler was hardly ever used). 

I used to use it as an applications programmer, but when I ended up
having to more system-y things, particularly on micros, I pined for IMP!
That and the diagnostics - by default (you could turn it off, of course)
you used to get a complete symbolic dump of the stack with all called
routines and the values of all instances of variables at the time of an
error.  At one time one of the guys here produced an IMP debugger, but
considering how good the diagnostics were hardly anyone used it.  It was
one of the things that didn't get moved when we went to the third
architecture. 

Pete Stephens an Geoff Milard left the University some years ago to set
us as a compiler company, Edinburgh Portable Compilers.  They still use
IMP as the implementation language for their compilers, I believe, but
only bootstrap enough of it to compile compilers, not necessarily any
more.  In it's life IMP or a significant subset of it has run on (at
least) KDF9, IBM 360/370, ICL 4/75, ICL 2900, PDP8, PDP9, PDP11, PDP15,
Modular 1, Univac 1108, IBM 3090-style, Sequent Symmetry (i386/i486) and
no doubt many others hat I don't know about - I'm by no means an expert
in these things.

Sam
Newsgroups: alt.folklore.computers