Edinburgh IMP

{{Short description|Systems programming language used in the EMAS operating system}}

{{Use dmy dates|date=April 2022}}

{{Infobox programming language

| name = Edinburgh IMP

| logo =

| logo caption =

| screenshot =

| screenshot caption =

| paradigms = Procedural, imperative, structured

| family = ALGOL

| designers = Bratley, Whitfield, M. M. Barritt, David Rees, Peter D. Schofield, Roderick McLeod, Hamish Dewar, Peter D. Stephens, Peter Robertson

| developer = University of Edinburgh

| released = {{Start date and age|1966}}

| latest release version =

| latest release date =

| typing = Static, strong

| scope = Lexical

| programming language = Atlas Autocode, IMP

| platform = English Electric KDF9,
ICL System 4, UNIVAC 1108, IBM System/360, DEC PDP-9, DEC PDP-10, DEC PDP-11, DEC PDP-15, CTL Modular One, x86, Interdata 7-16, Interdata 7-32, Data General Nova

| operating system = BOS/360, DOS, Windows, Linux

| license =

| file ext =

| file format =

| website =

| implementations = Edinburgh IMP

| dialects = IMP77, IMP80

| influenced by = ALGOL 60, Atlas Autocode

| influenced =

}}

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

Sources

  • {{cite web |url=http://history.dcs.ed.ac.uk/archive/apps/quine/self.txt |title=Early IMP Program (the world's first known self-reproducing program)}}
  • {{cite web |url=http://imp.nb-info.co.uk/download.htm |title=IMP77 Compiler: Intel (Windows, Linux) |url-status=dead |archive-url=https://web.archive.org/web/20050407092209/http://imp.nb-info.co.uk/download.htm |archive-date=2005-04-07 |access-date=2020-05-05}}
  • {{cite web |last=Freeman |first=Alan |url=https://gtoal.com/edinburgh-computer-history-project/archive/languages/imp/ImpMacros.pdf |title=The IMP Macro Language Manual}}
  • {{cite web |last=Freeman |first=Alan |url=https://history.dcs.ed.ac.uk/archive/os/emas/users/ercc07/emas-2900/macros.txt |title=An example of IMP Macros in use}}
  • {{cite web |last=McLeod |first=Roderick |date=1974 |url=http://history.dcs.ed.ac.uk/archive/scans/ercc_imp_manual/imp001.html |title=Edinburgh IMP Language Manual, Second edition, scan}}
  • {{cite web |first=Peter S. |last=Robertson |date=December 1977 |url=http://imp.nb-info.co.uk/imp77.pdf |title=The IMP77 Language: A Reference Manual (rekeyed 2003) |website=Edinburgh Computer History Project |publisher=University of Edinburgh |url-status=dead |archive-url=https://web.archive.org/web/20050529121643/http://imp.nb-info.co.uk/imp77.pdf |archive-date=2005-05-29}} ([http://history.dcs.ed.ac.uk/archive/dec10/imp/3b35b.mem.html ASCII version])
  • {{cite web |url=http://frink.ucg.ie/~bfoley/edhist/using77/using77.html |title=Using Imp77}}
  • {{cite web |url=http://history.dcs.ed.ac.uk/archive/docs/psrthesis/psrthesis.html |title=The Production of Optimised Machine Code for High Level Languages using Machine-Independent Intermediate Codes}}
  • {{cite web |url=http://www.gtoal.com/athome/edinburgh/imp77/gtoal/icode.html |archive-url=https://web.archive.org/web/20041216161503/http://www.gtoal.com/athome/edinburgh/imp77/gtoal/icode.html |url-status=dead |archive-date=2004-12-16 |title=I-Code V1.3 Working Notes}}
  • {{cite web |url=http://history.dcs.ed.ac.uk/archive/os/emas/users/ercm10/imp11manual.html |title=IMP11 User's Guide}}
  • {{cite web |last=Farvis |first=Keith M. |date=June 1978 |url=http://history.dcs.ed.ac.uk/archive/dec10/imp/3b35c.mem.html |title=IMP on the DECsystem-10/20: Users Guide (Library Manual)}}
  • {{cite web |last=Stephens |first=Felicity |last2=Murison |first2=John |url=http://history.dcs.ed.ac.uk/archive/os/emas/emas2/compilers/imp80/doc/manual/imp80.html |title=Edinburgh IMP80 Language Manual}}
  • {{cite web |author=Bratley |author2=Rees |author3=Schofield |author4=Whitfield |date=1965 |url=http://history.dcs.ed.ac.uk/archive/languages/atlas-autocode/imp9.imp.txt |title=Source of first ever IMP compiler; for English Electric KDF9}}
  • {{cite web |last=Dewar |first=Hamish |url=http://history.dcs.ed.ac.uk/archive/languages/imp-pdp15/hdcomp-emul.i15.html |title=IMP compiler for PDP9/PDP15 (source code)}}
  • {{cite web |url=http://history.dcs.ed.ac.uk/archive/languages/imp-pdp15/windows_port/ |title=Windows Port of IMP15 (generates stand-alone .exe files)}}
  • {{cite web |last=Dewar |first=Hamish Notes on |url=http://history.dcs.ed.ac.uk/archive/languages/imp-pdp15/CompilerOutput.htm |title=IMP9 Compiler Output}}
  • {{cite web |last=Rees |first=David |url=https://gtoal.com/history.dcs.ed.ac.uk/archive/languages/skimp/skimp_ii.html |title=Skimp MkII compiler (used in 3rd year compilers class at University of Edinburgh)}}
  • {{cite web |url=http://history.dcs.ed.ac.uk/archive/languages/imp11-tmp/imp11/sk11v.imp |title=IMP compiler for PDP11 bootstrapped via Skimp (source code)}}
  • {{cite web |date=1970 |url=http://history.dcs.ed.ac.uk/archive/languages/imp/allimpc1.txt |title=Source of first IMP compiler written entirely in IMP}}
  • {{cite web |last=Dewar |first=Hamish |url=http://www.gtoal.com/athome/utils/imp/imp22g-orig.imp.html |archive-url=https://web.archive.org/web/20031127081153/http://www.gtoal.com/athome/utils/imp/imp22g-orig.imp.html |url-status=dead |archive-date=2003-11-27 |title=Source of IMP compiler for 68000 platform}}
  • {{cite web |last=Robertson |first=Peter |url=http://history.dcs.ed.ac.uk/archive/languages/imp77 |title=Sources of Imp77 compilers for several platforms}}
  • {{cite web |last=Stephens |first=Peter D. |url=http://history.dcs.ed.ac.uk/archive/languages/imp80-tmp/imp/isrce-orig/rs6p422.i |title=Source of Imp80 compiler for Intel}}
  • {{cite web |last=Schofield |first=Peter D. |url=http://history.dcs.ed.ac.uk/archive/docs/Notes_on_IMP_Programming/ |title=Notes on IMP Programming}}
  • {{cite web |last=Stephens |first=Peter D. |url=http://history.dcs.ed.ac.uk/history/ImpLanguageAndCompiler |title=The IMP Language and Compiler (extracts) |url-status=dead |archive-url=https://web.archive.org/web/20060924014216/http://history.dcs.ed.ac.uk/history/ImpLanguageAndCompiler |archive-date=2006-09-24}}
  • {{cite web |last=Stephens |first=Peter D. |url=http://history.dcs.ed.ac.uk/history/Imp80 |title=IMP80: A Historical Introduction |url-status=dead |archive-url=https://web.archive.org/web/20041207140202/http://history.dcs.ed.ac.uk/history/Imp80 |archive-date=2004-12-07}}
  • {{cite web |last=Murison |first=John M. |url=http://history.dcs.ed.ac.uk/archive/docs/imp9toimp80.html |title=Differences between ERCC IMP on ICL 4/75 and IMP80 on ICL2900}}

References

  • {{cite web |last=McLeod |first=Roderick |last2=Barritt |first2=Marjorie M. |publication-date=1974 |url=http://www.ancientgeek.org.uk/EMAS/EMAS_Manuals/IMP/Edinburgh_IMP_Language_Manual.pdf |date=July 1970 |title=Edinburgh IMP Language Manual, Second edition |publisher=University of Edinburgh, Edinburgh Regional Computing Centre}}

{{ALGOL programming}}

Category:History of computing in the United Kingdom

Category:Science and technology in Edinburgh

Category:Systems programming languages

Category:University of Edinburgh School of Informatics