A light-weight implementation of Standard ML written by Sergei Romanenko <email@example.com> of the Keldysh Institute of Applied Mathematics with assistance from Peter Sestoft <firstname.lastname@example.org>, Royal Veterinary and Agricultural University. Moscow ML is based on CAML Light.
Version: 1.20 implements the Standard ML Core language.
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, 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.
Release 1.20 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. Release 1.20 includes the basis libraries Array, List, and Vector and the MS-DOS version includes the Graphics library from Caml Light.
In principle, Moscow ML can be compiled on any platform supported by Caml Light. So far we have tried Intel 80386-based IBM PCs running MS-DOS, Microsoft 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.
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 IBM PCs, slower on RISCs).
Caml Light 0.61 and gcc are required to recompile Moscow ML for Unix or Caml Light 0.61, djgpp, Perl, and Borland C++ version 2.0 (or later) to recompile Moscow ML for DOS.