MLton 20210117

# Credits

MLton was designed and implemented by HenryCejtin, MatthewFluet, SureshJagannathan, and StephenWeeks.

- HenryCejtin wrote the IntInf implementation, the original profiler, the original man pages, the .spec files for the RPMs, and lots of little hacks to speed stuff up.

- MatthewFluet implemented the X86 and AMD64 native code generators, ported mlprof to work with the native code generator, did a lot of work on the SSA optimizer, both adding new optimizations and improving or porting existing optimizations, updated the Basis Library implementation, ported ConcurrentML and ML-NLFFI to MLton, implemented the ML Basis system, ported MLton to 64-bit platforms, and currently leads the project.

- SureshJagannathan implemented some early inlining and uncurrying optimizations.

- StephenWeeks implemented most of the original version of MLton, and continues to keep his fingers in most every part.

Many people have helped us over the years. Here is an alphabetical list.

- JesperLouisAndersen sent several patches to improve the runtime on FreeBSD and ported MLton to run on NetBSD and OpenBSD.

- JohnnyAndersen implemented BinIO, modified MLton so it could cross compile to MinGW, and provided useful discussion about cross-compilation.

- Alexander Abushkevich extended support for OpenBSD.

- Ross Bayer added the -keep ast compile-time option and experimented with porting the build system to CMake.

- Kevin Bradley added initial support for SuccessorML features.

- Bryan Camp added -disable-pass _regex_ and enable-pass _regex_ compile options to generalize -drop-pass _regex_ and added Array_copyArray and Array_copyVector primitives.

- Jason Carr added a parser combinator library and a parser for the SXML IR, extended compilation to start with a .sxml file, experimented with alternate control-flow analyses for closure conversion, added new DuplicateGlobals and SplitTypes SSA optimization passes, improved RSSAShrink, added a new BounceVars RSSA optimization pass, added -llvm-aamd {none|tbaa} to control including alias-analysis metadata when compiling with LLVM, implemented static allocation and initialization of global objects.

- Christopher Cramer contributed support for additional Posix.ProcEnv.sysconf variables, performance improvements for String.concatWith, and Debian packaging.

- Alain Deutsch and PolySpace Technologies provided many bug fixes and runtime system improvements, code to help the Sparc/Solaris port, and funded a number of improvements to MLton.

- Armando Doval updated mlnlffigen to warn and skip functions with struct/union arguments.

- Martin Elsman provided helpful discussions in the development of the ML Basis system.

- Brent Fulgham ported MLton most of the way to MinGW.

- AdamGoode provided a script to build the PDF MLton Guide and maintains the Fedora packages.

- Simon Helsen provided bug reports, suggestions, and helpful discussions.

- Joe Hurd provided useful discussion and feedback on source-level profiling.

- Manan Joshi added a parser for the SSA2 IR.

- VesaKarvonen contributed esml-mode.el and esml-mlb-mode.el (see Emacs), contributed patches for improving match warnings, contributed esml-du-mlton.el and extended def-use output to include types of variable definitions (see EmacsDefUseMode), and improved constant folding of floating-point operations.

- Richard Kelsey provided helpful discussions.

- Ville Laurikari ported MLton to IA64/HPUX, HPPA/HPUX, PowerPC/AIX, PowerPC64/AIX.

- Brian Leibig implemented the LLVMCodegen.

- Geoffrey Mainland helped with FreeBSD packaging.

- Eric McCorkle ported MLton to Intel Mac.

- Daman Morris introduced new Overflow-checking primitives and removed old Overflow-checking primitives and special-case code required (e.g., Arith transfers in IRs) to support them.

- TomMurphy wrote the original version of MLton.Syslog as part of his mlftpd project, and has sent many useful bug reports and suggestions.

- Michael Neumann helped to patch the runtime to compile under FreeBSD.

- Barak Pearlmutter built the original Debian package for MLton, and helped us to take over the process.

- Filip Pizlo ported MLton to (PowerPC) Darwin.

- Vedant Raiththa extended the ForeignFunctionInterface with support for pure and impure attributes to _import.

- Krishna Ravikumar added initial support for vector expressions and the Vector_vector primitive.

- James Reilly added a parser for the SSA IR.

- John Reppy assisted in porting MLton to Intel Mac.

- Sam Rushing ported MLton to FreeBSD.

- Rob Simmons refactored the array and vector implementation in the Basis Library: into a primitive implementation (using SeqInt.int for indexing) and a wrapper implementation (using the default Int.int for indexing).

- Jeffrey Mark Siskind provided helpful discussions and inspiration with his Stalin Scheme compiler.

- Matthew Surawski added LoopUnroll and LoopUnswitch SSA optimizations.

- WesleyTerpstra added support for MLton.Process.create, made a number of contributions to the ForeignFunctionInterface, contributed a number of runtime system patches, added support for compiling to a C library, ported MLton to MinGW and all Debian supported architectures with cross-compiling support, and maintains the Debian and MinGW packages.

- Maksim Yegorov added rudimentary support for ./configure and other improvements to the build system and implemented the ShareZeroVec SSA optimization.

- Luke Ziarek assisted in porting MLton to (PowerPC) Darwin.

We have also benefited from other software development tools and used code from other sources.

- MLton was developed using Standard ML of New Jersey and the Compilation Manager (CM)

- MLton’s lexer (mlton/frontend/ml.lex), parser (mlton/frontend/ml.grm), and precedence-parser (mlton/elaborate/precedence-parse.fun) are modified versions of code from SML/NJ.

- The MLton Basis Library implementation of conversions between binary and decimal representations of reals uses David Gay’s gdtoa library.

- The MLton Basis Library implementation uses modified versions of portions of the the SML/NJ Basis Library implementation modules OS.IO, Posix.IO, Process, and Unix.

- The MLton Basis Library implementation uses modified versions of portions of the ML Kit Version 4.1.4 Basis Library implementation modules Path, Time, and Date.

- Many of the benchmarks come from the SML/NJ benchmark suite.

- Many of the regression tests come from the ML Kit Version 4.1.4 distribution, which borrowed them from the Moscow ML distribution.

- MLton uses the GNU multiprecision library for its implementation of IntInf.

- MLton’s implementation of mllex, mlyacc, the ckit Library, the ML-LPT Library, the MLRISC Library, the SML/NJ Library, Concurrent ML, mlnlffigen and ML-NLFFI are modified versions of code from SML/NJ.