Standard ML is often used to implement another language L, for example, the syntax of the HOL logic in hol90 or the syntax of CCS for the Concurrency Workbench. Typically, one defines the abstract syntax of L by a datatype declaration. Then useful functions over the datatype can be defined (such as finding the free variables of a formula when L is a logic). Soon afterwards, one concludes that concrete syntax is easier for humans to read than abstract syntax, and so writes a parser and prettyprinter for L. In the situation just outlined, ML is called the metalanguage, and L is called the object language, or OL. (Edinburgh/INRIA/Cambridge ML, the precursor to Standard ML, was originally a programming metalanguage for a particular object language, the LCF logic.) The purpose of a quotation/antiquotation mechanism is to allow one to embed expressions in the object language's concrete syntax inside of ML programs, and to mix the object language expressions with ML expressions.

This document formally specifies the semantics of local modules and packages - dynamically typed modules that are first-class values - as an extension to the functional programming language Standard ML. The language thus defined is a substantial subset of a larger extension of Standard ML, a language known as Alice ML. Packages are the central feature of Alice ML that enables support for typed open programming.

HaMLet "To Be Or Not To Be Standard ML" ;-) HaMLet is a faithful implementation of the Standard ML programming language (SML'97). It aims to be * an accurate reference implementation of the language specification, * a platform for experimentation with the language semantics or extensions to it, * a useful tool for educational purposes. The implementation is intended to be direct a translation of the language found in the Definition of Standard ML * implements complete Standard ML, * closely follows the structure of the Definition, with lots of cross references, * conforms to the latest version of the Standard ML Basis Library * is written entirely in Standard ML, with the ability to bootstrap, * may readily be compiled with SML/NJ, MLton, Moscow ML, Poly/ML, Alice ML, or the ML Kit, or SML#. HaMLet can perform different phases of execution - like parsing, elaboration (type checking), and evaluation - selectively.

Whole-program optimization is a compilation technique in which optimizations operate over the entire program. This allows the compiler many optimization opportunities that are not available when analyzing modules separately (as with separate compilation). Most of MLton's optimizations are whole-program optimizations. Because MLton compiles the whole program at once, it can perform optimization across module boundaries. As a consequence, MLton often reduces or eliminates the run-time penalty that arises with separate compilation of SML features such as functors, modules, polymorphism, and higher-order functions. MLton takes advantage of having the entire program to perform transformations such as: defunctorization, monomorphisation, higher-order control-flow analysis, inlining, unboxing, argument flattening, redundant-argument removal, constant folding, and representation selection. Whole-program compilation is an integral part of the design of MLton and is not likely to change.

comparison of OCaml and SML * SML has a formal Definition * SML has a number of compilers * OCaml has built-in support for oop comparison of OCaml and MLton * Performance o Both have excellent performance o MLton performs extensive WholeProgramOptimization, which provides improvements in modular programs o MLton uses native types, like 32-bit integers, without any penalty due to tagging or boxing. OCaml uses 31-bit integers with a penalty due to tagging, and 32-bit integers with a penalty due to boxing o MLton represents records compactly by reordering and packing the fields o In MLton, polymorphic and monomorphic code have the same performance o In MLton, module boundaries have no impact on performance * MLton's ForeignFunctionInterface is simpler * Tools o OCaml has a debugger, MLton does not. o OCaml supports separate compilation, MLton does not o OCaml compiles faster than MLton. o MLton supports profiling of both time and allocation

SMLserver is a Web server plugin for the Apache Web server. SMLserver makes it possible to write dynamic Web applications using your favorite programming language without sacrificing efficiency and scalability of your Web service. SMLserver includes the possibility of accessing a variety of different relational database management systems (RDBMSs), such as Oracle and Postgresql. Main Features of SMLserver Standard ML '97 The Definition of Standard ML SMLserver supports all of Standard ML '97, as defined in the Definition of Standard ML. In particular, SMLserver supports the use of Standard ML Modules and most of the Standard ML Basis Library. SMLserver is based on the MLKit. Web Server API SMLserver provides an SML interface to much of the Apache API, thereby giving the SML programmer access to the following features:

ML modules provide hierarchical namespace management, as well as fine-grained control over the propagation of type information, but they do not allow modules to be broken up into separately compilable, mutually recursive components. Mixin modules facilitate recursive linking of separately compiled components, but they are not hierarchically composable and typically do not support type abstraction. We synthesize the complementary advantages of these two mechanisms in MixML. A MixML module is like an ML structure with some components specified but not defined unifing the ML structure and signature languages into one. MixML seamlessly integrates hierarchical composition, translucent MLstyle data abstraction, and mixin-style recursive linking.Tthe design of MixML is minimalist emphasizing how all the interesting features of the ML module system can be understood simply as stylized uses of a small set of orthogonal underlying constructs, with mixin composition playing a central role.

The ML Basis system extends Standard ML to support programming-in-the-very-large, namespace management at the module level, separate delivery of library sources, and more. While Standard ML modules are a sophisticated language for programming-in-the-large, it is difficult, if not impossible, to accomplish a number of routine namespace management operations when a program draws upon multiple libraries provided by different vendors. The ML Basis system is a simple, yet powerful, approach that builds upon the programmer's intuitive notion of the top-level environment (a basis). Here are some of the key features of the ML Basis system: 1. Explicit file order 2. Implicit dependencies 3.Scoping and renaming: The ML Basis system provides mechanisms for limiting the scope of (i.e, hiding) and renaming identifiers. 4.No naming convention for finding the file that defines a module. To import a module, its defining file must appear in some ML Basis file.

Metis is an automatic theorem prover for first order logic with equality. Features of Metis * Coded in Standard ML (SML), with an emphasis on keeping the code as simple as possible. * Compiled using MLton to give respectable performance on standard benchmarks. * Reads in problems in the standard .tptp file format of the TPTP problem set. * Outputs detailed proofs in TSTP format, where each proof step is one of 6 simple rules. * Outputs saturated clause sets when input problems are discovered to be unprovable. Project Status Metis is being actively developed