A
-
An Experimental Analysis of Self-Adjusting Computation Umut Acar, Guy Blelloch, Matthias Blume, and Kanat Tangwongsan. PLDI 2006.
-
Compiling with Continuations (addall). ISBN 0521416957. Andrew W. Appel. Cambridge University Press, 1992.
-
A Critique of Standard ML. Andrew W. Appel. JFP 1993.
-
Modern Compiler Implementation in ML (addall). ISBN 0521582741 Andrew W. Appel. Cambridge University Press, 1998.
-
Shrinking Lambda Expressions in Linear Time. Andrew Appel and Trevor Jim. JFP 1997.
-
A lexical analyzer generator for Standard ML. Version 1.6.0 Andrew W. Appel, James S. Mattson, and David R. Tarditi. 1994
B
-
Tree Pattern Matching for ML. Marianne Baudinet, David MacQueen. 1985.
Describes the match compiler used in an early version of SML/NJ.
-
Compiling Standard ML to Java Bytecodes. Nick Benton, Andrew Kennedy, and George Russell. ICFP 1998.
-
Interlanguage Working Without Tears: Blending SML with Java. Nick Benton and Andrew Kennedy. ICFP 1999.
-
Exceptional Syntax. Nick Benton and Andrew Kennedy. JFP 2001.
-
Adventures in Interoperability: The SML.NET Experience. Nick Benton, Andrew Kennedy, and Claudio Russo. PPDP 2004.
-
Shrinking Reductions in SML.NET. Nick Benton, Andrew Kennedy, Sam Lindley and Claudio Russo. IFL 2004.
Describes a linear-time implementation of an Appel-Jim shrinker, using a mutable IL, and shows that it yields nice speedups in SML.NET’s compile times. There are also benchmarks showing that SML.NET when compiled by MLton runs roughly five times faster than when compiled by SML/NJ.
-
Embedded Interpreters. Nick Benton. JFP 2005.
-
The Edinburgh SML Library. Dave Berry. University of Edinburgh Technical Report ECS-LFCS-91-148, 1991.
-
A semantics for ML concurrency primitives. Dave Berry, Robin Milner, and David N. Turner. POPL 1992.
-
Lessons From the Design of a Standard ML Library. Dave Berry. JFP 1993.
-
Compiling SML to Java Bytecode. Peter Bertelsen. Master’s Thesis, 1998.
-
OO Programming styles in ML. Bernard Berthomieu. LAAS Report #2000111, 2000.
-
No-Longer-Foreign: Teaching an ML compiler to speak C "natively". Matthias Blume. BABEL 2001.
-
Portable library descriptions for Standard ML. Matthias Blume. 2001.
-
Destructors, Finalizers, and Synchronization. Hans Boehm. POPL 2003.
Discusses a number of issues in the design of finalizers. Many of the design choices are consistent with MLtonFinalizable.
C
-
Flow-directed Closure Conversion for Typed Languages. Henry Cejtin, Suresh Jagannathan, and Stephen Weeks. ESOP 2000.
Describes MLton’s closure-conversion algorithm, which translates from its simply-typed higher-order intermediate language to its simply-typed first-order intermediate language.
-
A Parallel, Real-Time Garbage Collector. Perry Cheng and Guy E. Blelloch. PLDI 2001.
-
QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. Koen Claessen and John Hughes. ICFP 2000.
-
Proper Tail Recursion and Space Efficiency. William D. Clinger. PLDI 1998.
-
Adding Threads to Standard ML. Eric C. Cooper and J. Gregory Morrisett. CMU Technical Report CMU-CS-90-186, 1990.
-
Stream Fusion: From Lists to Streams to Nothing at All. Duncan Coutts, Roman Leshchinskiy, and Don Stewart. Submitted for publication. April 2007.
D
-
Principal Type-Schemes for Functional Programs. Luis Damas and Robin Milner. POPL 1982.
-
Functional Unparsing. Olivier Danvy. BRICS Technical Report RS 98-12, 1998.
-
Exhancements to eXene. Dustin B. Deboer. Master of Science Thesis, 2005.
Describes ways to improve widget concurrency, handling of input focus, X resources and selections.
-
A Concurrent, Generational Garbage Collector for a Multithreaded Implementation of ML. Damien Doligez and Xavier Leroy. POPL 1993.
-
Modular Type Classes. Derek Dreyer, Robert Harper, Manuel M.T. Chakravarty. University of Chicago Technical Report TR-2007-02, 2006.
-
Principal Type Schemes for Modular Programs. Derek Dreyer and Matthias Blume. ESOP 2007.
-
Extensional Polymorphism. Catherin Dubois, Francois Rouaix, and Pierre Weis. POPL 1995.
An extension of ML that allows the definition of ad-hoc polymorphic functions by inspecting the type of their argument.
E
-
Garbage Collection Safety for Region-based Memory Management. Martin Elsman. TLDI 2003.
-
Type-Specialized Serialization with Sharing Martin Elsman. University of Copenhagen. IT University Technical Report TR-2004-43, 2004.
F
-
The Little MLer (addall). ISBN 026256114X. Matthias Felleisen and Dan Freidman. The MIT Press, 1998.
-
Kill-Safe Synchronization Abstractions. Matthew Flatt and Robert Bruce Findler. PLDI 2004.
-
Contification Using Dominators. Matthew Fluet and Stephen Weeks. ICFP 2001.
Describes contification, a generalization of tail-recursion elimination that is an optimization operating on MLton’s static single assignment (SSA) intermediate language.
-
Phantom Types and Subtyping. Matthew Fluet and Riccardo Pucella. TCS 2002.
-
Generic Polymorphism in ML. J. Furuse. JFLA 2001.
The formalism behind G’CAML, which has an approach to ad-hoc polymorphism based on Dubois95, the differences being in how type checking works an an improved compilation approach for typecase that does the matching at compile time, not run time.
G
-
A Multi-Threaded Higher-order User Interface Toolkit. Emden R. Gansner and John H. Reppy. User Interface Software, 1993.
-
The Standard ML Basis Library. (addall) ISBN 0521794781. Emden R. Gansner and John H. Reppy. Cambridge University Press, 2004.
An introduction and overview of the Basis Library, followed by a detailed description of each module. The module descriptions are also available online.
-
Region-based Memory Management in Cyclone. Dan Grossman, Greg Morrisett, Trevor Jim, Michael Hicks, Yanling Wang, and James Cheney. PLDI 2002.
H
-
Combining Region Inference and Garbage Collection. Niels Hallenberg, Martin Elsman, and Mads Tofte. PLDI 2002.
-
Introduction to Programming Using SML (addall). ISBN 0201398206. Michael R. Hansen, Hans Rischel. Addison-Wesley, 1999.
-
Typing First-Class Continuations in ML. Robert Harper, Bruce F. Duba, and David MacQueen. JFP 1993.
-
On the Type Structure of Standard ML. Robert Harper and John C. Mitchell. TOPLAS 1992.
-
On the Practicality and Desirability of Highly-concurrent, Mostly-functional Programming. Carl H. Hauser and David B. Benson. ACSD 2004.
Describes the use of Concurrent ML in implementing the Ped text editor. Argues that using large numbers of threads and message passing style are is a practical and effective ways of modularizing a program.
-
A Functional Description of TeX’s Formula Layout. Reinhold Heckmann and Reinhard Wilhelm. JFP 1997.
-
Safe and Flexible Memory Management in Cyclone. Mike Hicks, Greg Morrisett, Dan Grossman, and Trevor Jim. University of Maryland Technical Report CS-TR-4514, 2003.
-
Compiling HOL4 to Native Code. Joe Hurd. TPHOLs 2004.
Describes a port of HOL from Moscow ML to MLton, the difficulties encountered in compiling large programs, and the speedups achieved (roughly 10x).
J
-
Garbage Collection: Algorithms for Automatic Memory Management (addall). ISBN 0471941484. Richard Jones. John Wiley & Sons, 1999.
K
-
Mistakes and Ambiguities in the Definition of Standard ML. Stefan Kahrs. University of Edinburgh Technical Report ECS-LFCS-93-257, 1993.
Describes a number of problems with the 1990 Definition, many of which were fixed in the 1997 Definition.
Also see the addenda published in 1996.
-
Generics for the Working ML’er. Vesa Karvonen. ML 2007.
-
Pickler Combinators. Andrew Kennedy. JFP 2004.
-
sml2java: A Source To Source Translator. Justin Koser, Haakon Larsen, Jeffrey A. Vaughan. DPCOOL 2003.
L
-
Faster Algorithms for Finding Minimal Consistent DFAs. Kevin Lang. 1999.
-
mGTK: An SML binding of Gtk+. Ken Larsen and Henning Niss. USENIX Annual Technical Conference, 2004.
-
The ZINC Experiment: an Economical Implementation of the ML Language. Xavier Leroy. Technical report 117, INRIA, 1990.
A detailed explanation of the design and implementation of a bytecode compiler and interpreter for ML with a machine model aimed at efficient implementation.
-
Polymorphism by Name for References and Continuations. Xavier Leroy. POPL 1993.
-
MLRISC Annotations. Allen Leung and Lal George. 1998.
M
-
Asynchronous Exceptions in Haskell. Simon Marlow, Simon Peyton Jones, Andy Moran and John Reppy. PLDI 2001.
An asynchronous exception is a signal that one thread can send to another, and is useful for the receiving thread to treat as an exception so that it can clean up locks or other state relevant to its current context.
-
An Ideal Model for Recursive Polymorphic Types. David MacQueen, Gordon Plotkin, Ravi Sethi. POPL 1984.
-
A Distributed Concurrent Implementation of Standard ML. David Matthews. University of Edinburgh Technical Report ECS-LFCS-91-174, 1991.
-
Papers on Poly/ML. David C. J. Matthews. University of Edinburgh Technical Report ECS-LFCS-95-335, 1995.
-
That About Wraps it Up: Using FIX to Handle Errors Without Exceptions, and Other Programming Tricks. Bruce J. McAdam. University of Edinburgh Technical Report ECS-LFCS-97-375, 1997.
-
A Just-In-Time Backend for Moscow ML 2.00 in SML. Bjarke Meier, Kristian Nørgaard. Masters Thesis, 2003.
A just-in-time compiler using GNU Lightning, showing a speedup of up to four times over Moscow ML’s usual bytecode interpreter.
The full report is only available in Danish.
-
A Theory of Type Polymorphism in Programming. Robin Milner. Journal of Computer and System Sciences, 1978.
-
How ML Evolved. Robin Milner. Polymorphism—The ML/LCF/Hope Newsletter, 1983.
-
Commentary on Standard ML (online pdf). (addall) ISBN 0262631327. Robin Milner and Mads Tofte. The MIT Press, 1990.
Introduces and explains the notation and approach used in The Definition of Standard ML.
-
The Definition of Standard ML. (addall) ISBN 0262631326. Robin Milner, Mads Tofte, and Robert Harper. The MIT Press, 1990.
Superseded by The Definition of Standard ML (Revised). Accompanied by the Commentary on Standard ML.
-
The Definition of Standard ML (Revised). (addall) ISBN 0262631814. Robin Milner, Mads Tofte, Robert Harper, and David MacQueen. The MIT Press, 1997.
A terse and formal specification of Standard ML’s syntax and semantics. Supersedes The Definition of Standard ML.
-
Principles and a Preliminary Design for ML2000. The ML2000 working group, 1999.
-
Automatic Code Generation from Coloured Petri Nets for an Access Control System. Kjeld H. Mortensen. Workshop on Practical Use of Coloured Petri Nets and Design/CPN, 1999.
-
Procs and Locks: a Portable Multiprocessing Platform for Standard ML of New Jersey. J. Gregory Morrisett and Andrew Tolmach. PPoPP 1993.
-
ML Grid Programming with ConCert. Tom Murphy VII. ML 2006.
N
-
fxp - Processing Structured Documents in SML. Andreas Neumann. Scottish Functional Programming Workshop, 1999.
Describes fxp, an XML parser implemented in Standard ML.
-
Parsing and Querying XML Documents in SML. Andreas Neumann. Doctoral Thesis, 1999.
-
Compiling ML Polymorphism with Explicit Layout Bitmap. Huu-Duc Nguyen and Atsushi Ohori. PPDP 2006.
O
-
Purely Functional Data Structures. ISBN 0521663504. Chris Okasaki. Cambridge University Press, 1999.
-
A Simple Semantics for ML Polymorphism. Atsushi Ohori. FPCA 1989.
-
A Polymorphic Record Calculus and Its Compilation. Atsushi Ohori. TOPLAS 1995.
-
An Unboxed Operational Semantics for ML Polymorphism. Atsushi Ohori and Tomonobu Takamizawa. LASC 1997.
-
Type-Directed Specialization of Polymorphism. Atsushi Ohori. IC 1999.
-
Regular-expression derivatives reexamined. Scott Owens, John Reppy, and Aaron Turon. JFP 2009.
P
-
ML For the Working Programmer (addall) ISBN 052156543X. Larry C. Paulson. Cambridge University Press, 1996.
-
The HiPE/x86 Erlang Compiler: System Description and Performance Evaluation. Mikael Pettersson, Konstantinos Sagonas, and Erik Johansson. FLOPS 2002.
Describes a native x86 Erlang compiler and a comparison of many different native x86 compilers (including MLton) and their register usage and call stack implementations.
-
User’s Guide to ML-Lex and ML-Yacc Roger Price. 2009.
-
Reactive Programming in Standard ML. Riccardo R. Puccella. 1998. ICCL 1998.
R
-
Concurrent Programming in ML. Norman Ramsey. Princeton University Technical Report CS-TR-262-90, 1990.
-
Embedding an Interpreted Language Using Higher-Order Functions and Types. Norman Ramsey. IVME 2003.
-
An Expressive Language of Signatures. Norman Ramsey, Kathleen Fisher, and Paul Govereau. ICFP 2005.
-
Widening Integer Arithmetic. Kevin Redwine and Norman Ramsey. CC 2004.
Describes a method to implement numeric types and operations (like Int31 or Word17) for sizes smaller than that provided by the processor.
-
Synchronous Operations as First-Class Values. John Reppy. PLDI 1988.
-
Concurrent Programming in ML (addall). ISBN 0521480892. John Reppy. Cambridge University Press, 1999.
Describes ConcurrentML.
-
Definitional Interpreters Revisited. John C. Reynolds. HOSC 1998.
-
Definitional Interpreters for Higher-Order Programming Languages John C. Reynolds. HOSC 1998.
-
Defects in the Revised Definition of Standard ML. Andreas Rossberg. 2001.
S
-
Dual-Mode Garbage Collection. Patrick M. Sansom. Workshop on the Parallel Implementation of Functional Languages, 1991.
-
When Do Match-Compilation Heuristics Matter. Kevin Scott and Norman Ramsey. University of Virginia Technical Report CS-2000-13, 2000.
Modified SML/NJ to experimentally compare a number of match-compilation heuristics and showed that choice of heuristic usually does not significantly affect code size or run time.
-
ML Pattern Match Compilation and Partial Evaluation. Peter Sestoft. Partial Evaluation, 1996.
Describes the derivation of the match compiler used in Moscow ML.
-
Space-Efficient Closure Representations. Zhong Shao and Andrew W. Appel. LFP 2006.
-
Unix System Programming with Standard ML. Anthony L. Shipman. 2002.
Includes a description of the Swerve HTTP server written in SML.
-
Calcul Statique des Applications de Modules Parametres. Julien Signoles. JFLA 2003.
Describes a defunctorizer for OCaml, and compares it to existing defunctorizers, including MLton.
-
Incremental Execution of Transformation Specifications. Ganesh Sittampalam, Oege de Moor, and Ken Friis Larsen. POPL 2004.
-
A Separate Compilation Extension to Standard ML. David Swasey, Tom Murphy VII, Karl Crary and Robert Harper. ML 2006.
T
-
ML-Yacc User’s Manual. Version 2.4 David R. Tarditi and Andrew W. Appel. 2000.
-
No Assembly Required: Compiling Standard ML to C. David Tarditi, Peter Lee, and Anurag Acharya. 1990.
-
Object-oriented programming and Standard ML. Lars Thorup and Mads Tofte. ML, 1994.
-
Type Inference for Polymorphic References. Mads Tofte. IC 1990.
-
A Debugger for Standard ML. Andrew Tolmach and Andrew W. Appel. JFP 1995.
-
Combining Closure Conversion with Closure Analysis using Algebraic Types. Andrew Tolmach. TIC 1997.
Describes a closure-conversion algorithm for a monomorphic IL. The algorithm uses a unification-based flow analysis followed by defunctionalization and is similar to the approach used in MLton (CejtinEtAl00).
-
From ML to Ada: Strongly-typed Language Interoperability via Source Translation. Andrew Tolmach and Dino Oliva. JFP 1998.
Describes a compiler for RML, a core SML-like language. The compiler is similar in structure to MLton, using monomorphisation, defunctionalization, and optimization on a first-order IL.
U
-
Elements of ML Programming (addall). ISBN 0137903871. Jeffrey D. Ullman. Prentice-Hall, 1998.
W
-
A Types-as-Sets Semantics for Milner-Style Polymorphism. Mitchell Wand. POPL 1984.
-
Managing Memory with Types. Daniel C. Wang. PhD Thesis.
Chapter 6 describes an implementation of a type-preserving garbage collector for MLton.
-
Type-Preserving Garbage Collectors. Daniel C. Wang and Andrew W. Appel. POPL 2001.
Shows how to modify MLton to generate a strongly-typed garbage collector as part of a program.
-
Programming With Recursion Schemes. Daniel C. Wang and Tom Murphy VII.
Describes a programming technique for data abstraction, along with benchmarks of MLton and other SML compilers.
-
Whole-Program Compilation in MLton. Stephen Weeks. ML 2006.
-
Simple Imperative Polymorphism. Andrew Wright. LASC, 8(4):343-355, 1995.
The origin of the ValueRestriction.
Y
-
Encoding Types in ML-like Languages. Zhe Yang. ICFP 1998.
Z
-
Stabilizers: A Modular Checkpointing Abstraction for Concurrent Functional Programs. Lukasz Ziarek, Philip Schatz, and Suresh Jagannathan. ICFP 2006.
-
Flattening tuples in an SSA intermediate representation. Lukasz Ziarek, Stephen Weeks, and Suresh Jagannathan. HOSC 2008.
Abbreviations
-
ACSD = International Conference on Application of Concurrency to System Design
-
BABEL = Workshop on multi-language infrastructure and interoperability
-
DPCOOL = Workshop on Declarative Programming in the Context of OO Languages
-
FPCA = Conference on Functional Programming Languages and Computer Architecture
-
IFL = International Workshop on Implementation and Application of Functional Languages
-
IVME = Workshop on Interpreters, Virtual Machines and Emulators
-
PLDI = Conference on Programming Language Design and Implementation
-
PPDP = International Conference on Principles and Practice of Declarative Programming
-
TCS = IFIP International Conference on Theoretical Computer Science
-
TLDI = Workshop on Types in Language Design and Implementation
-
TPHOLs = International Conference on Theorem Proving in Higher Order Logics