Edinburgh IMP

Systems programming language used in the EMAS operating system

Edinburgh IMP
ParadigmsProcedural, imperative, structured
Designed byBratley, Whitfield, M. M. Barritt, David Rees, Peter D. Schofield, Roderick McLeod, Hamish Dewar, Peter D. Stephens, Peter Robertson
DeveloperUniversity of Edinburgh
First appeared1966; 56 years ago (1966)
Typing disciplineStatic, strong
Implementation languageAtlas Autocode, IMP
PlatformEnglish Electric KDF9,
ICL System 4, UNIVAC 1108, IBM System/360, DEC PDP-9, DEC PDP-15, CTL Modular One, x86
OSBOS/360, DOS, Windows, Linux
Major implementations
Edinburgh IMP
IMP77, IMP80
Influenced by
ALGOL 60, Atlas Autocode

Edinburgh IMP is a development of Atlas Autocode, initially developed around 1966-1969 at the University of Edinburgh, Scotland. It is a general-purpose programming language which was used heavily for systems programming.

Expressively, IMP is highly similar to ALGOL and includes all the ALGOL-style block structure, reserved words (keywords), and data types such as arrays, and records. It adds to ALGOL-style languages a string type (an array of characters, although these have a predeclared size) and built-in operators for string manipulation and character handling. One significant difference from ALGOL is that IMP does not support parameters passed by name, although it does support parameters passed by reference.

IMP provides significant control over the storage mapping of data, plus commands for addressing within parts of words. Most IMP compilers offer compiler-generated runtime checks and a stack trace (backtrace) facility by default, even in production code. IMP allows inline assembler machine language instructions in source code.

The ERCC Implementation of IMP for the ICL System 4 (known as IMP9) offered a syntax-driven macro facility (designed by Alan Freeman) that was similar to the Compiler Compiler features offered by IMP's predecessor, Atlas Autocode.

Early IMP compilers were developed for the English Electric KDF9, ICL System 4, UNIVAC 1108, IBM System/360, DEC PDP-9, DEC PDP-15 and CTL Modular One computers. IMP was used to implement the Edinburgh Multiple Access System (EMAS) operating system, and a compiler was written for the ICL 2900 series to allow porting of EMAS to that platform. In later years, a version of IMP named IMP77 was developed by Peter Robertson within the Computer Science department at Edinburgh which was a portable compiler that brought IMP to even more platforms. In 2002, the IMP77 language was resurrected by the Edinburgh Computer History Project for Intel x86 hardware running DOS, Windows, and Linux, and is once again in use by Edinburgh graduates and ex-pats.

The diverged IMP and IMP77 were later consolidated into one language with the introduction of the IMP80 standard, supported by implementations from the Edinburgh Regional Computer Centre. IMP80 has also been ported to several platforms including Intel and was actively in use into the 1990s.

Edinburgh IMP is unrelated to the later IMP syntax-extensible programming language developed by Edgar T. Irons, for the CDC 6600, which was the main language used by the National Security Agency (NSA) for many years.

See also

  • IMP (programming language) (contrast)


  • "Early IMP Program (the world's first known self-reproducing program)".
  • "IMP77 Compiler: Intel (Windows, Linux)". Archived from the original on 7 April 2005. Retrieved 5 May 2020.
  • Freeman, Alan. "The IMP Macro Language Manual" (PDF).
  • Freeman, Alan. "An example of IMP Macros in use".
  • McLeod, Roderick (1974). "Edinburgh IMP Language Manual, Second edition, scan".
  • Robertson, Peter S. (December 1977). "The IMP77 Language: A Reference Manual (rekeyed 2003)" (PDF). Edinburgh Computer History Project. University of Edinburgh. Archived from the original (PDF) on 29 May 2005. (ASCII version)
  • "Using Imp77".
  • "The Production of Optimised Machine Code for High Level Languages using Machine-Independent Intermediate Codes".
  • "I-Code V1.3 Working Notes". Archived from the original on 16 December 2004.
  • "IMP11 User's Guide".
  • Farvis, Keith M. (June 1978). "IMP on the DECsystem-10/20: Users Guide (Library Manual)".
  • Stephens, Felicity; Murison, John. "Edinburgh IMP80 Language Manual".
  • Bratley; Rees; Schofield; Whitfield (1965). "Source of first ever IMP compiler; for English Electric KDF9".
  • Dewar, Hamish. "IMP compiler for PDP9/PDP15 (source code)".
  • "Windows Port of IMP15 (generates stand-alone .exe files)".
  • Dewar, Hamish Notes on. "IMP9 Compiler Output".
  • Rees, David. "Skimp MkII compiler (used in 3rd year compilers class at University of Edinburgh)". Archived from the original on 29 September 2007.
  • "IMP compiler for PDP11 bootstrapped via Skimp (source code)".
  • "Source of first IMP compiler written entirely in IMP". 1970.
  • Dewar, Hamish. "Source of IMP compiler for 68000 platform". Archived from the original on 27 November 2003.
  • Robertson, Peter. "Sources of Imp77 compilers for several platforms".
  • Stephens, Peter D. "Source of Imp80 compiler for Intel".
  • Schofield, Peter D. "Notes on IMP Programming".
  • Stephens, Peter D. "The IMP Language and Compiler (extracts)". Archived from the original on 24 September 2006.
  • Stephens, Peter D. "IMP80: A Historical Introduction". Archived from the original on 7 December 2004.
  • Murison, John M. "Differences between ERCC IMP on ICL 4/75 and IMP80 on ICL2900".


  • McLeod, Roderick; Barritt, Marjorie M. (July 1970). "Edinburgh IMP Language Manual, Second edition" (PDF). University of Edinburgh, Edinburgh Regional Computing Centre (published 1974).
  • v
  • t
  • e
ALGOL programming
  • ^ = full name and link in prior ALGOL version above
    Category: ALGOL Category: ALGOL 60