Modern Compiler Implementation in ML: Basic Techniques

Which version of ML should I use?

Why are there different versions of ML?

During the period 1994-96, a consortium of ML implementors including representatives of the Standard ML of New Jersey project, the Moscow ML project, and the Harlequin MLWorks product, worked together to standardize and greatly improve ML ``standard library'' and operating-system interface functions. The result is the SML Basis Library, which all three implementations (almost) support. Over the same period, the designers of ML made some small cleanups to the language design (deleting more than they added!), resulting in the Standard ML '97 language.

What's the best version for use with the Modern Compiler Implementation textbook?

Version 110, the current release of Standard ML of New Jersey, is fully SML'97 compliant. The Tiger compiler modules have been tested with this version of ML.

Support software

The Tiger compiler requires the use of ML-Lex (lexical analyzer generator), ML-Yacc (parser generator), and the SML/NJ Library (utility library functions not part of the Standard ML Basis Library); all of these are part of the SML/NJ software distribution. Make sure you use the version of Lex, Yacc, and SML-NJ-Lib that comes with the version of SML/NJ that you are using.

Other versions of ML

Harlequin
Within a few months, I expect to have tested the Tiger compiler under Harlequin MLWorks, with which it should also be compatible. The ML-Lex, ML-Yacc, and SML/NJ-Library components of SML/NJ should also be usable with Harlequin ML works at that time.
SML/NJ 109.30
The Tiger compiler modules that inhabited the Modern Compiler Implementation in ML web page between March, 1997 and September 10, 1997 are compatible with SML/NJ version 109.30 (made in July 1997), and you can still find them here.
SML/NJ 109.4
The Tiger compiler modules that inhabited the Modern Compiler Implementation in ML web page between December 1, 1996 and February 13, 1997 are compatible with SML/NJ version 109.4 (made in February 1996), and you can still find them here.
SML/NJ 0.93
It should be possible to modify these Tiger compiler modules to work with SML/NJ version 0.93. However, a great benefit of using recent versions of SML/NJ is that you can use the SML/NJ Compilation Manager (which comes with the 109.4 or 109.31 distribution) to do automatic dependency analysis, (quasi)separate compilation, linking, and smart recompilation.
Moscow ML
Moscow ML is a subset implementation of ML that does not at present support the full ML Module system. Therefore, it does not support ML-Lex, ML-Yacc, and the SML/NJ Library. However it may be possible to make a version of the Tiger compiler that runs in Moscow ML.