ml1.org.uk How ML/I is implemented

ML/I has been implemented in various ways over the years. This page details the various methods, and provides documentation on the two non-trivial (but more interesting, and probably more optimal) ones.

ML/I was originally written in an abstract language called L. The defining characteristic of L was that it was designed specifically for writing ML/I; it is said to be a descriptive language for ML/I. By using L, it was possible to express the logic of ML/I in a way that most effectively described the algorithms used.

The first implementation of ML/I was on the Digital PDP-7, and this was produced by a simple hand conversion of the L source to PDP-7 assembly language. Once ML/I was running on the PDP-7, it was itself used to convert the L source to PDP-7 assembly language in a more optimal way. All updates to ML/I were performed on the L source code, and this was then mapped once again to PDP-7 assembly language using ML/I itself. This process is called an L-map. Full details of the rationale behind this implementation method can be found in Part III of Peter Brown's dissertation. Detailed instructions for performing such an implementation are in the document 'Implementing software using the L language'. The L source code is available for download (see below).

It was found that implementation of ML/I by using an L-map was moderately difficult and time-consuming unless the implementor was already skilled in using ML/I; it was also a problem if a macro processor was not available to the implementor. An alternate method was thus developed. ML/I was translated from L (an essentially high level language) into assembly language for an abstract machine; the translation was done using ML/I itself. This assembly language was called LOWL. It was found to be much easier to implement ML/I by mapping LOWL into assembly language for the target machine (a process known as a LOWL-map) than it was to perform an L-map. Detailed instructions for performing a LOWL-map are in the document 'Implementing software using the LOWL language'. The LOWL source code is available for download (see below).

ML/I was later hand mapped from L into BCPL, a portable, typeless, high level language; some reorganisation and optimisation was also carried out. This implementation was not particularly efficient, but given the ubiquity of BCPL at the time this was done, was thought to be a good move. This `BCPL-map' has only been used on one actual system, however. The BCPL source code is available on request.

Finally, the BCPL version of ML/I was hand mapped into the C language. Many modern implementations use this version (the `C-map') although it is not as efficient as an L-map or a LOWL-map could be. The C source code is available on request.

Documents

Documentation format

Each document is available in Portable Document Format (PDF). This can be viewed on most systems using appropriate software such as Adobe Acrobat Reader, which is freely available from http://www.adobe.com. Clicking on the 'Get Adobe Reader' graphic at the end of this section will take you straight to the main Adobe Acrobat Reader page.

As an alternative, each document is also available in HTML, as a single file. This can of course be viewed with any browser, although the output is not as pleasing as the PDF version.

Document downloads

These are the currently available documents concerned with the implementation of ML/I:

Title Download
Implementing software using the L language
Implementing software using the LOWL language
Implementing software using the LOWL language - Supplement 3: ML/I

Source code

This includes not only source files, but supporting files such as test data, etc. Older versions of these files may be found in the archive section.

Source code format

Each file, or group of files, is available as a ZIP file (.ZIP). This can be unpacked using the ZIP utility, which is freely available from http://www.info-zip.org. Clicking on the 'Zip' graphic at the end of this section will take you straight to the main UnZip page. Text files in the ZIP files have lines terminated by a carriage return, linefeed pair.

As an alternative, each file (or group of files) is also available as a 'gzipped' 'tar' file; this will often be more convenient for those using a UNIX, or UNIX-like, system. Text files in the 'gzipped' 'tar' files have lines terminated by a linefeed only.

Source code downloads

Title Version Download
L source for ML/I AIE
LOWL source for LOWLTEST L4A
LOWL source for ML/I AJB
ML/I test suite T2A

Valid XHTML 1.0! Valid CSS!

This site is copyright © 2011 Bob Eager
Last updated: 13 Aug 2011