Moscow ML with separate compilation (Peter Sestoft)
Thu, 8 Dec 1994 23:12:21 GMT

          From comp.compilers

Related articles
Moscow ML with separate compilation (1994-12-08)
| List of all articles for this month |

Newsgroups: comp.lang.functional,comp.compilers
From: (Peter Sestoft)
Keywords: ML, functional, available
Organization: The Royal Veterinary and Agricultural University, Frederiksberg, Denmark
Date: Thu, 8 Dec 1994 23:12:21 GMT

Moscow ML provides a light-weight implementation of Standard ML, a
strict functional language widely used in teaching and research.

The new version 1.20 of Moscow ML

        * implements the Standard ML Core language
        * implements separate compilation and a limited version of the
            Standard ML Modules language, with signatures and structures
            but no functors
        * has basis libraries Array, List, and Vector (for MSDOS also Graphics)
        * includes a manual and technical documentation


The sublanguage of Modules implemented by Moscow ML contains
signatures and non-nested structures, and identifies structures with
source files. It is certainly less expressive than the full Standard
ML Modules language, but the type-safe separate compilation facility
is simple, quite useful, and easy to use.

It is the intention to implement the full Standard ML Modules language
(including functors) in due course.


Compilation of a signature produces a compiled interface file, which
is used when compiling other signatures and structures.

Compilation of a structure produces a bytecode file. Bytecode files
are compact and load fast. For instance, a 3250-line program
consisting of 24 structures and 17 signatures compiles to 221 KB of
bytecode and 241 KB of compiled signatures. Starting the ML system
and loading the 24 bytecode files takes 1-2 cpu seconds plus network
delays, less that 5 seconds real time in all.

This release permits loading of precompiled bytecode files into the
top-level interactive session. The next release will be able to
create stand-alone executables by linking bytecode files.


There is a mechanism for adding basis libraries, as in Caml Light.
This release includes the basis libraries Array, List, and Vector (and
the MS DOS version includes the Graphics library from Caml Light).


If you use Moscow ML for introductory teaching, there is little reason
to upgrade from the previous version 1.10, which will continue to be
available. We have discovered only two (insignificant) bugs in it.

If you use Moscow ML in a project with a fair amount of source code,
or if you could use arrays or vectors, then upgrading to version 1.20
might make your life a lot easier.


In principle, Moscow ML can be compiled on any platform supported by
Caml Light. So far we have tried Intel386-based PCs running DOS,
Windows, OS/2 or Linux, DEC MIPS running Ultrix, DEC Alpha running
OSF/1, Sun 4 running SunOS, HP9000 running HP/UX, SGI MIPS running IRIX 5.

Systems requirements for MS DOS: a 386 or 486 or 586 PC with 2 MB of
RAM or more, and DOS 3.3 or later. The installation requires around
1.2 MB disk space.

Systems requirements for Linux: a somewhat recent version of Linux
(Linux 1.0 is certainly good enough). The installation requires 0.5
MB disk space.

Moscow ML is particularly useful when fast compilation and modest
storage consumption are more important than fast program execution.

Thanks to the efficient Caml Light run-time system used in Moscow ML,
it compiles fast and uses little memory, typically 5-10 times less
memory than SML/NJ 0.93 and 2-3 times less than Edinburgh ML. Yet the
bytecode is only 3 to 10 times slower than SML/NJ 0.93 compiled native
code (fast on PCs, slower on RISCs).


Moscow ML was written by
        Sergei Romanenko (
        Keldysh Institute of Applied Mathematics, Russian Academy of Sciences
        Miusskaya Pl. 4, 125047 Moscow, Russia.
with assistance from
        Peter Sestoft ( Royal Veterinary and Agricultural
        University, Thorvaldsensvej 40, DK-1871 Frederiksberg C, Denmark.
        Some work was done at the Technical University of Denmark,
        and some while visiting AT&T Bell Laboratories, New Jersey, USA.

Moscow ML is based on, and would not exist without:
        * the CAML Light 0.6 implementation by Xavier Leroy and Damien Doligez
            (INRIA, Rocquencourt, France);
        * the ML Kit by Lars Birkedal, Nick Rothwell, Mads Tofte and David Turner
            (Copenhagen University, Denmark, and Edinburgh University, Scotland);

        * The DOS executables are in
        * The Linux executables are in
        * The DOS and Unix source files are in

You will need Caml Light 0.61 and gcc to recompile Moscow ML for Unix.
You will need Caml Light 0.61, djgpp, perl, and Borland C++ version 2.0
(or later) to recompile Moscow MLs for DOS:
        * Caml Light can be obtained from
        * Djgpp can be obtained from

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.