A light-weight implementation of Standard ML written by Sergei Romanenko <firstname.lastname@example.org> of the Keldysh Institute of Applied Mathematics with assistance from Peter Sestoft <email@example.com>, Royal Veterinary and Agricultural University. Moscow ML is based on CAML Light.
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 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.
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.
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).