Standard ML Family GitHub Project (original) (raw)
This is the web page for the Standard ML Family GitHub project (organization name: SMLFamily). This site is very much "under construction", and it replaces the earlier SourceForge web site for standardml.org (which now redirects to this page). Contributions, corrections, and suggestions for additional information are very much welcomed.
Project Description
The Standard ML Family project provides a home for online versions of various formal definitions of Standard ML, including the "Definition of Standard ML, Revised" (Standard ML 97). The site also supports coordination between different implementations of the Standard ML (SML) programming language by maintaining common resources such as the documentation for theStandard ML Basis Libraryand standard test suites. The goal is to increase compatibility and resource sharing between Standard ML implementations.
The site includes a history section devoted to the history of ML, and of Standard ML in particular. This section will contain a collection of original source documents relating to the design of the language.
Definitions of Standard ML
With the permission of MIT Press, we are able to makeThe Definition of Standard ML (SML '90) andThe Definition of Standard ML, Revised(SML '97) available for downloading as pdf files. These are (currently) formatted for US letter page size. Printed copies of the SML '97 definition are available fromMIT Press.
The SML '90 definition is complete, including the index, but we are still working on recreating the index for the SML '97 definition.
The sources to the two editions of The Definition are available on GitHub as follows:
- The Definition of Standard ML
The original by Robin Milner, Mads Tofte, and Robert Harper. - The Definition of Standard ML, Revised
The 1997 revision by Robin Milner, Mads Tofte, Robert Harper, and David MacQueen. - SML, The Living Language (aka Successor ML).
Continually evolving version of The Definition, with corrections and extensions. Derived from the 1990 and 1997 editions. The Standard ML Basis Library: - Standard ML Basis Library, by Emden Gansner and John Reppy.
This document is also available in hard copy with additional tutorial material fromCambridge University Press. Claudio Russo's Non-Standard ML is available on GitHub at Non-Standard ML.
The Concrete Syntax of Standard ML:
- Andreas Rossberg's CFG for Standard ML concrete syntax. Some valuable critiques of The Definitions:
- Mistakes and Ambiguities in The Definition of Standard ML, by Stefan Kahrs.
- Defects in the Revised Definition of Standard ML, by Andreas Rossberg. Machine-checked meta-theory of Standard ML:
- Mechanization of the Type-Theoretic Definition of Standard ML.
Twelf formalization by Karl Crary and Robert Harper of the Harper-Stone Type-Theoretic Interpretation of Standard ML, together with a complete verification of type safety for Standard ML. Language design critiques and reviews: - A Critique of Standard ML by Andrew Appel, Princeton CS-TR-364-92, Nov 1992. Also published in Journal of Functional Programming, 3,4, 1993, pp. 391-429.
- Reflections on Standard ML by David MacQueen. Published in "Functional Programming, Concurrency, Simulation and Automated Reasoning", Peter Lauer, Editor, Springer-Verlag LNCS Vol 693, 1994, pp. 32-46. Both of these design critiques are somewhat outdated because they predate the revised Definition.
Mailing lists
The SourceForge project hosts two mailing lists relating to Standard ML. Visit the info page for a list to subscribe.
Name: sml-implementers
Address: sml-implementers@lists.sourceforge.net
Info: http://lists.sourceforge.net/mailman/listinfo/sml-implementers
Subscribers: http://lists.sourceforge.net/lists/roster/sml-implementersName: sml-list
Address: sml-list@lists.sourceforge.net
Info: http://lists.sourceforge.net/mailman/listinfo/sml-list
Subscribers: http://lists.sourceforge.net/lists/roster/sml-list
Successor ML
Recently discussions of improvements and extensions of the Standard ML design have resumed, under the working title "Successor ML". This project includes a subsidiary siteSuccessor ML devoted to this ongoing work. Earlier discussions on the successor-ml.org wiki are available there, and a new wiki has been started for future discussions.
Implementations, Extensions, and Variations of Standard ML
- Standard ML of New Jersey (SML/NJ)
A free, open-source implementation of SML '97 that generates native code for a broad range of platforms. - Moscow ML.
With Version 2.0, now implements SML '97 (including modules) with some extensions. - MLj.
Implements an SML '97 subset, compiling to the JVM with extensions for working with Java.
[MLj has moved from Persimmon IT to Edinburgh.] - MLKit.
Version 3 implements SML '97, uses region analysis for memory management. - SMLtoJs.
A compiler from SML to JavaScript, based on MLKit. - SMLonline.
Compile and run SML programs in the browser, based on SMLtoJs. - MLton.
A whole-program optimizing SML Compiler. (SML '97) - Poly/ML,Dave Matthew's Standard ML Compiler.
Formerly a product of Abstract, Inc., Poly/ML is now is now available as a free, open source implementation. Version 4 implements SML '97. - Poplog Standard ML.
Now available as free software (SML '90). - TILT.
A certifying compiler for Standard ML based on typed intermediate languages. - MLWorks
Formerly a product of Harlequin, Ltd, ML Works is now a freely available, open-source system owned by Ravenbrook. - HaMLet
A faithful interpreter for SML'97, written entirely in SML, as a direct translation of the formal language definition. - CakeML
CakeML is a dialect of ML designed to be both easy to program in and easy to reason about formally in proof assistants for higher-order logic. - SML#
SML# is a new programming language in the Standard ML family being developed at RIEC (Research Institute of Electrical Communication), Tohoku University . Its design goal is to provide practically important extensions while maintaining the compatibility of the Definition of Standard ML. - Alice ML
An extension of SML with rich support for concurrent and distributed programming, e.g., futures, threads, higher-order marshalling (including code), and type-safe dynamic module import & export. - Manticore
Manticore is a high-level parallel programming language aimed at general-purpose applications running on multi-core processors. Manticore supports parallelism at multiple levels: explicit concurrency and coarse-grain parallelism via CML-style constructs and fine-grain parallelism via various light-weight notations, such as parallel tuple expressions and NESL/Nepal-style parallel array comprehensions.
Standard ML smackage repository
The Standard ML Smackage repository is a resource of community contributed code.
Standard ML History
The Standard ML History pages are the beginnings of a collection of documents related to the history of the development of Standard ML. This subsite is in the early stages of development, and contributions or suggestions are welcome.
Close Cousins of the SML Family
- OCaml
OCaml is an industrial strength programming language supporting functional, imperative and object-oriented styles. It is a close relative of the SML family that is enjoying considerable adoption in industry, and inspiring new dialects in the ML family, such as F#. - F#
F# is a mature, open source, cross-platform, functional-first programming language which empowers users and organizations to tackle complex computing problems with simple, maintainable and robust code. Originally derived from O'Caml, F# is a full-scale industrial-strength language in the ML family that is now open source. - Yeti
Yeti is ML style functional programming language, that runs on the JVM.
Other relevant links
- Existential Type, Bob Harper's Blog on topics including SML, type theory, logic, proof.
- SMLserver: Serve the web with Standard ML.
Last modified: Mon Sep 7 17:22:16 PDT 2015