MetaML release Version 1.0
The Pacific Software Research Center at the Oregon Graduate Institute
is proud to announce the first public release of MetaML. For more
information, and directions on how to download and install the system
please refer to the webpage:
MetaML is a meta-programming system designed to make the
construction of meta-programs such as program generators safe and
easy. In a meta-programming system meta-programs manipulate
object-programs. Meta-programs may construct object-programs,
combine object-program fragments into larger object-programs,
observe the structure and other properties of object-programs, and
execute object-programs to obtain their values.
In addition to these operational properties, a meta-programming
system should also have a good human-system interface. MetaML
provides the following benefits:
1) It is easy to construct code using pattern-based object-code
templates. Templates look like the object language they represent.
2) Program fragments are easy to combine into larger program
fragments, this is accomplished by a parameterizable splicing
mechanism analogous to a "template-with-holes".
3) Object-code has a parametric type, i.e., there is code with type
Int, code with type Float, etc. Type correctness of the
meta-program, guarantees type correctness of the object-programs it
4) Bound variables in templates are handled in a sophisticated way
which guarantees no name clashes, and which obeys the rules of
static scoping. Free variables in program templates refer to the
value of the variable at the static location where the template is
defined, not where it is eventually executed.
5) Object-programs can be run. Generated code can be “tested” inside
6) Object-programs can be printed. This is essential for debugging
of meta-programs. The object-programs are pretty-printed in the
manner in which they are normally written by a programmer.
7) Object-programs have structure. It is possible to analyze
object-programs, take them apart, etc.
MetaML implements a number of extensions to Standard ML.
These extensions are interesting in their own right. They
are useful even if your not using the meta-programming
features. They include:
1) Locally polymorphic arguments to datatype constructors.
2) Existentially quantifed arguments to datatype constructors.
3) Higher order datatypes.
Type constructors that take type constructors as parameters)
4) Support for Monads. First class Monads,
and Haskell-like Do notation.
5) Extensible records.
6) Anonymous, extensible sums.
7) Polymorphic recursion.
and many experimental features related to meta-programming.
The MetaML team : Zino Benaissa, Tim Sheard.
Questions? Problems? Comments? Feedback? Contributions are welcome.
send mail to: firstname.lastname@example.org