Skip to content
LLVM backend for moscow ML
C Python Common Lisp Shell
Find file
Latest commit 076778b Jesper Louis Andersen committed with We can prove most natural number stuff to be %total.
Failed to load latest commit information.
bin mosmllib is now exsmllib
bootstrap Get unit order right when loading -P full.
compiler Kill trailing whitespace in a file I missed.
doc Revert minor screwup.
exsmllib Documentation cleanup in Strbase.sml
extensions Delete trailing whitespace.
lex Implement CharArray and CharVector.
man Add man pages.
mosmlyac Welcome to 2009. Let's remove the register keyword completely :)
regression Delete trailing whitespace.
runtime The Reverse_int64() macro is known as Reverse_int64_t() now.
spatches Use Coccinelle to UPPERCASE memory.h's macros. Pushback Modify to mod…
tools Implement CharArray and CharVector.
twelf We can prove most natural number stuff to be %total.
.gitignore Add a fixme about covering structconstants later.
AUTHORS Add information about how to contribute. Cleanup AUTHORS file and add…
CONTRIBUTING Updated with new irc channel name.
COPYING Move copyright notice to the right place.
INSTALL Add missing files. When issuing the runtop target default to -P full
Makefile.am_sml Rename camlrunm to exsmlrunm to avoid name collisions with the origin…
Makefile.mosml Use our own mosmlyac.
NEWS Add missing files.
README Style touchup.
TODO Bump the TODO file. Add a -c option to which makes it run our configure script. Add support for installing exsmllib.
mosml_config.h Cleanup types in intern.c's 64bit path. While here, make ready for

Project Ex-SML

What is this?

This is a fork of Moscow ML 2.01 onto which it is the plan to add a backend for the LLVM system and then extend Standard ML with some new ideas.

Jesper Louis Andersen - 2008,2009.

Current status

Currently, we are pretty far from a working system. We have chosen to implement a representation of the LLVM ASCII assembler format for SML. This is the most ML-idiomatic way to work with LLVM I think, though it a different path than the OCaml bindings for LLVM.

We still need a compilation from the internal Lambda IR to LLVM and probably a closure conversion phase as well. After that we need to build glue.


Use UNIX tools all the way. We want a pipeline of commands, not some big buildsystem built into the REPL. Use Autotools. Prefer sh(1) for scripting and Python if it is more expensive.

  • Handle the win32 implementation separately.
  • Kill old Macintosh code.
  • Kill old MSDOS code.
  • Kill the Threaded/Direct Jump compiler.

Original readme:

This is file README for Moscow ML 2.00 for Linux/Unix (June 2000)


The current version 2.00 of Moscow ML

  • implements the full Standard ML language, as revised 1997, including Modules and some extensions
  • yet is backwards compatible with versions prior to 2.00
  • implements large parts of the new SML Basis Library
  • implements separate compilation
  • can produce compact stand-alone executables (a la Caml Light)
  • supports quotations and antiquotations, useful for metaprogramming
  • supports dynamic linking of external functions under Linux (x86 and Alpha), FreeBSD, NetBSD, Solaris, Digital Unix, HP-UX, MacOS, and MS Windows'95/98/NT

New in version 2.00 of Moscow ML

  • The full SML Modules language (structures, signatures, and functors) is now supported, thanks to Claudio Russo. Also, several extensions to the SML Modules language are provided:
    • higher-order functors: functors may be defined within structures and functors
    • first-class modules: structures and functors may be packed and then handled as Core language values, which may then be unpacked as structures or functors again
    • recursive modules: signatures and structures may be recursively defined
  • Value polymorphism has become friendlier: non-generalizable free type variables are left free, and become instantiated (once only) when the bound variable is used
  • Added facilities for creating and communicating with subprocesses (structure Unix and Signal from SML Basis Library).
  • Added facilities for efficient functional generation of HTML code (structure Msp); also supports the writing of ML Server Page scripts.
  • Added facilities setting and accessing `cookies' in CGI scripts (structure Mosmlcookie), thanks to Hans Molin, Uppsala, Sweden.
  • The Gdimage structure now produces PNG images (using Thomas Boutell's gd library).


Compilation under Unix is best done using GNU make, gcc, and Perl. A binary installation requires 5 MB disk space; a source installation requires 25 MB disk space.


Documentation files:

  • install.txt : Installation instructions for Linux
  • README : This file
  • doc/manual.pdf : User manual (PDF format)
  • doc/mosmlref.pdf : A compact guide to Moscow ML syntax and primitives
  • doc/mosmllib.pdf : Moscow ML library documentation with an index
  • doc/mosmllib/*.html : Moscow ML library documentation in HTML format


  • bootstrap : Bytecode to bootstrap the compiler

Source files:

  • compiler : The compiler
  • runtime : The C-based caml-light runtime
  • mosmlyac : The ML yacc compiler
  • mosmllib : The standard library
  • smllib_* : Dynamically loadable libraries
  • regression : The regression framework, imported from MLton
  • scripts : Shell scripts working as compiler drivers
Something went wrong with that request. Please try again.