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
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
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.
See the CML home page
for information on CML. In the Andrew environment, you can load
it from sml with
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