IMP is an "ALGOL-like" high-level language that was originally [1966-1970?] designed as the implementation language for the Edinburgh Multi-Access System, developed at Edinburgh University. It was widely used at Edinburgh University for implementing systems, teaching programming and as a general purpose programming language on many different machines. (http://imp.nb-info.co.uk/index.htm)
Despite heavy use there, it did not see significant commercial adoption.
The EMAS general purpose time-sharing system is notable for being coded entirely in IMP.
THE IMP-77 LANGUAGE (reference manual): http://imp.nb-info.co.uk/imp77.pdf
Article on Imp from The Computer Journal, Volume 17, Issue 3, pp. 216-223, http://history.dcs.ed.ac.uk/history/ImpLanguageAndCompiler
A new code generator for Imp on the Intel platform has been developed by the Edinburgh computer history project using the original Skimp bootstrap method. A translator to C has also been written which covers 90% of the language.
The Algol-60-like language 'Imp' from Edinburgh University (a descendant of Atlas Autocode, which itself was ported from the Atlas to the KDF-9) was a high-level language used initially for operating system coding, and later for applications - just like C, but predating it by several years.
Imp was widely ported to systems as diverse as the KDF-9, ICL4-50,4-75/IBM360,370/Amdahl V7, ICL1900, ICL2900, Modular 1, Univac 1108, IBM 7090, CDC Cyber, PDP-9/PDP-11/PDP-15/DEC-10, Interdata 32 series, Perkin-Elmer 3220, Sparc/SunOS, Acorn ARM/Archimedes [AcornArchimedes], NS32000/Acorn Panos, Transputer, Ferranti DISC, Argus 700, Z80, 6809, (some HP calculator that has been forgotten), MTS, 68000, Sequent Symmetry, and finally Intel 386.
I note from a cursory reading, that Imp supports the "natural" reversed if syntax; seen, for example, in DEC's Basic Plus and also Perl. Is this perhaps the first language to have this form? (I am thinking of the construct which makes sense of: x := x/y if y != 0)
-- Imp inherited that from AA and I suspect it was common in the earlier Autocodes. It was also used in another Edinburgh language, HAL (High-level Assembly Language). One trick used in HAL to keep the compiler short was that the 'reversed if' syntax was also valid after the REPEAT keyword of a CYCLE ... REPEAT, so whereas AA would have "%until condition %cycle; ...; %repeat" and Imp would have the functionally identical "%cycle; ...; %repeat until <condition>", HAL went for the reversed condition by saying "CYCLE ... REPEAT IF <condition>"