15-312 Foundations of Programming Languages

The implementation language in this course will be Standard ML. We assume you are already familiar with ML (15-212 is a prerequisite for this class), so we provide only a few potentially helpful links.

Running SML/NJ

On Suns and other Unix machines, you may run the CS installation of SML/NJ with


or simply as /usr/contributed/bin/sml-cm. The first command runs SML/NJ version 110.0.3, the latter SML version 110.0.6. You're welcome to develop your code using any SML compiler you like, but please make sure your code runs correctly under SML/NJ 110.0.3: when we grade, we will use that version to test your code. Also, the interface to the Compilation Manager varies depending on the version of SML/NJ, so you'll probably run into fewer hassles if you use the same version we do.

Extensible ML (EML) and MultiJava

Extensible ML extends ML with a class construct that is just like ML's datatype construct, except that it is hierarchically extensible. Similarly, functions are also extensible in EML.

You can download a prototype implementation by getting and unzipping the file eml.tar.gz. This link is available only from CMU machines; the authors of EML ask that it not be redistributed outside CMU. This implementation differs slightly from the language discussed in class, and is missing some features of ML (including modules, regular ML-style datatypes, lambdas, exceptions, and modules). The readme.txt file in the distribution explains how to run EML, and gives examples of the syntax. The most complete reference for EML is an ICFP paper describing the language and type system.

MultiJava extends Java with open classes (the ability to define a set of methods outside the receiver classes) and multi-methods (the ability to dispatch on arguments to a method in addition to the receiver). The MultiJava home page has documentation and a downloadable compiler.

Concurrent ML (CML)

See the CML home page for information on CML. In the Andrew environment, you can load it from sml with

    CM.autoload' "/usr/contributed/lib/smlnj/lib/cml.cm";

which defines the structure CML. You can see the components with open CML; or refer to the documentation or the examples. If you use the compilation manager, include cml.cm in sources.cm.

In the CS domain, CML can be run as cml-cm on most Linux machines.

Using SML/NJ

[ Home | Schedule | Assignments | Software | Resources ]

Frank Pfenning