The history of ML/I

ML/I was developed by Peter Brown as part of the work for his Ph.D. dissertation at the University of Cambridge, and the first version was written in 1966 (it is amazing that such an old computer program should still be in demand!). Peter looked at various kinds of macro processors, and evaluated their various features, strengths and weaknesses before ML/I was developed. The full text of that part of his dissertation that surveyed the world of macro processors can be found in ' A survey of macro processors'.

ML/I has many distinguishing features, for example:

  • If correctly implemented, it is very small; even an unoptimised version on a PC is typically little more than 15KB as an executable file.
  • By modern standards, it is fast (although it was not always considered to be so!).
  • It is well documented, although at times the user manual can be a little offputting (this is, however, partly due to its very comprehensive nature).
  • It was a very advanced macro processor when it was first developed, and there are still, decades later, few general purpose macro processors that come near it in power and flexibility.
  • It is extremely flexible in its ability to handle macro calls of widely differing forms.

For a brief discussion of the particular features of ML/I, see ' A critique of ML/I'. Note, however, that some of the more important weaknesses mentioned therein have subsequently been addressed; in particular, the startline facility now allows ML/I to process line-oriented constructions much more easily, and character variables have now been implemented.

Early work on ML/I was centred mainly on the Digital PDP-7, and on the Cambridge Titan system. Other implementations were also performed during the course of the research; for a full account, see: 'An exercise in machine independence'. This used the original source of ML/I, written in an abstract high level language called L.

Peter Brown moved to the University of Kent in 1968, and further implementations resulted on the machines there. Peter implemented ML/I on the ICL 4130, and at this point also developed an easier method of implementing ML/I using an assembly language for an abstract machine (the language is called LOWL, or 'low level L'). An implementation on the PDP-11 was also carried out by Rod Saunders, a colleague. At about the same time, Peter wrote a very useful document explaining how ML/I works.

As an aside, Peter also developed some other software in LOWL. ALGEBRA (actually first written rather earlier) is a symbolic manipulation package; SCAN is a BASIC-like text scanning package intended for non-technical users; and UNRAVEL is a memory/dump formatting language. More details of these are available on the Other software page.

Bob Eager, an undergraduate student, became interested in ML/I at this stage (1971). He performed, in his spare time, an implementation on the Honeywell DDP-516; this was to be the first of many different ones carried out by him. In the following year he performed an implementation on the DECSystem-10 (unpublished). He also wrote some additional small programs in LOWL. In 1977, he performed another implementation (also unpublished) on the ICL 2900 under the ill-fated VME/K operating system.

Peter Brown also implemented ML/I on the ICL 2900, although details of this are now lost (the mapping macros remain, as an example). Other LOWL software was also implemented on the ICL 2900 at the same time.

At around the same time, Stephen Fickas, a postgraduate student, wrote a useful document describing how ML/I uses its data structures.

In the early 1980s, Bob Eager re-implemented ML/I in BCPL; this was a hand conversion rather than a blind mapping, and a lot of the code was reorganised. This version ran on the ICL 2900 under the EMAS operating system. Shortly afterwards, he also performed a conventional LOWL mapping to generate a VAX/VMS implementation. In following years, he also performed LOWL mappings for the IBM PC, for IBM mainframes, and for the ICL (previously ICT) 1900. The last of these was interesting, as it was to run on an emulation on the 1900 (which had ceased being manufactured some years before), and it was bootstrapped using Lorne Bouchard's 1968 implementation of an early version of ML/I (Bob had been lucky enough to find a binary card deck of this lying around many years before at the University of Sussex!).

The most important development was probably when Bob converted the BCPL version to C in 1985. This made ML/I available to a much wider audience, although at the cost of some efficiency. At the same time, he typed in the text of the ML/I User's Manual and updated it to the Fifth Edition, something that was long overdue after the publication of the Fourth Edition in 1970. The Simple Introductory Guide was also updated.

Bob has done a number of other implementations since, and has also done some updates to the core logic; these have been kept to a minimum to preserve the original ethos of ML/I. It is interesting to note that most of these updates were (unknown to Bob at the time) mentioned in the critique of ML/I.

There continues to be interest in ML/I, so Bob embarked on the creation of the ML/I web site in 2004. This includes the Sixth Edition of the ML/I User's Manual, and many other useful documents, as well as the latest versions of various implementations. These are available via the documentation page.

Valid XHTML 1.0! Valid CSS!

This site is copyright © 2018 Bob Eager
Last updated: 11 Oct 2018