DawidvC / RTMLton

MLton with Realtime GC and Threading features

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status

MLton is a whole-program optimizing compiler for the Standard ML programming language.

Features

  • Portability. Runs on the following platforms:

    • ARM: Linux (Debian).

    • Alpha: Linux (Debian).

    • AMD64: Darwin (Mac OS X), FreeBSD, Linux (Debian, Fedora, Ubuntu, …​), OpenBSD, Solaris (10 and above).

    • HPPA: HPUX (11.11 and above), Linux (Debian).

    • IA64: HPUX (11.11 and above), Linux (Debian).

    • PowerPC: AIX (5.2 and above), Darwin (Mac OS X), Linux (Debian, Fedora).

    • PowerPC64: AIX (5.2 and above).

    • S390: Linux (Debian).

    • Sparc: Linux (Debian), Solaris (8 and above).

    • X86: Cygwin/Windows, Darwin (Mac OS X), FreeBSD, Linux (Debian, Fedora, Ubuntu, …​), MinGW/Windows, NetBSD, OpenBSD, Solaris (10 and above).

  • Robustness.

    • Supports the full SML 97 language as given in The Definition of Standard ML (Revised).

    • A complete implementation of the Basis Library.

    • Generates standalone executables.

    • Compiles large programs.

    • Support for large amounts of memory (up to 4G on 32-bit systems; more on 64-bit systems).

    • Support for large array lengths (up to 231 - 1 on 32-bit systems; up to 263-1 on 64-bit systems).

    • Support for large files, using 64-bit file positions.

  • Performance.

    • Executables have excellent running times.

    • Generates small executables.

    • Untagged and unboxed native integers, reals, and words.

    • Unboxed native arrays.

    • Multiple garbage collection strategies.

    • Fast arbitrary-precision arithmetic based on the GMP.

  • Tools.

    • Source-level profiling for both time and allocation.

    • MLLex lexer generator.

    • MLYacc parser generator.

    • MLNLFFIGEN foreign-function-interface generator.

  • Extensions.

    • A simple and fast C FFI that supports calling from SML to C and from C to SML.

    • The ML Basis system for programming in the very large.

    • Libraries for continuations, finalization, interval timers, random numbers, resource limits, resource usage, signal handlers, object size, system logging, threads, weak pointers, and world save and restore.

Build and Install (from source)

Requirements

Software

  • GCC or Clang (The C compiler must support -std=gnu11.)

  • GMP (GNU Multiple Precision arithmetic library)

  • GNU Make

  • GNU Bash

  • binutils (ar, ranlib, strip, …​)

  • miscellaneous Unix utilities (diff, find, grep, gzip, patch, sed, tar, xargs, …​)

  • Standard ML compiler and tools to bootstrap:

    • MLton (mlton, mllex, and mlyacc) recommended. Pre-built binary packages for MLton can be installed via an OS package manager or (for select platforms) obtained from http://mlton.org.

    • SML/NJ (sml, ml-lex, ml-yacc) supported, but not recommended.

  • (optional, for documentation only) TeX, AsciiDoc, Pygments, GraphicsMagick or ImageMagick, …​

Hardware

  • ≥ 1GB RAM (for 32-bit platforms) or ≥ 2GB RAM (for 64-bit platforms)

Build Instructions

On typical platforms, building MLton requires no configuration and can be accomplished via:

$ make all

A small set of Makefile variables can be used to customize the build:

  • CC: Specify C compiler. Can be used for alternative tools (e.g., CC=clang or CC=gcc-7).

  • WITH_GMP_DIR, WITH_GMP_INC_DIR, WITH_GMP_LIB_DIR: Specify GMP include and library paths, if not on default search paths. (If WITH_GMP_DIR is set, then WITH_GMP_INC_DIR defaults to $(WITH_GMP_DIR)/include and WITH_GMP_LIB_DIR defaults to $(WITH_GMP_DIR)/lib.)

  • MLTON_RUNTIME_ARGS, MLTON_COMPILE_ARGS: Specify runtime and compile arguments given to (the to-be-built) mlton when compiling distributed executables ((self-compiled) mlton, mllex, mlyacc, mlprof, and mlnlffigen). Can be used for testing (e.g., MLTON_COMPILE_ARGS="-codegen c") or for downstream packaging.

  • BOOTSTRAP_MLTON_RUNTIME_ARGS, BOOTSTRAP_MLTON_COMPILE_ARGS: Specify runtime and compile arguments given to "old" mlton when compiling "bootstrapped" mlton. Can be used to work around bugs in "old" mlton when compiling "bootstrapped" mlton.

For example:

$ make CC=clang WITH_GMP_DIR=/opt/gmp MLTON_COMPILE_ARGS="-codegen c" all

The build artifacts are located under ./build. The just-built mlton can be executed via ./build/bin/mlton.

Building documentation can be accomplished via:

$ make docs

Install Instructions

On typical platforms, installing MLton (after performing make all and, optionally, make docs) to /usr/local can be accomplished via:

$ make install

A small set of Makefile variables can be used to customize the installation:

  • PREFIX: Specify the installation prefix.

For example:

$ make PREFIX=/opt/mlton install

Install (from binary package)

Requirements

Software

  • GCC or Clang (The C compiler must support -std=gnu11.)

  • GMP (GNU Multiple Precision arithmetic library)

  • GNU Make

  • GNU Bash

  • miscellaneous Unix utilities (bzip2, gzip, sed, tar, …​)

Binary Package

A .tgz or .tbz binary package can be extracted at any location, yielding README.adoc (this file), CHANGELOG.adoc, LICENSE, Makefile, bin/, lib/, and share/. The compiler and tools can be executed in-place (e.g., ./bin/mlton).

A small set of Makefile variables can be used to customize the binary package via make update:

  • CC: Specify C compiler. Can be used for alternative tools (e.g., CC=clang or CC=gcc-7).

  • WITH_GMP_DIR, WITH_GMP_INC_DIR, WITH_GMP_LIB_DIR: Specify GMP include and library paths, if not on default search paths. (If WITH_GMP_DIR is set, then WITH_GMP_INC_DIR defaults to $(WITH_GMP_DIR)/include and WITH_GMP_LIB_DIR defaults to $(WITH_GMP_DIR)/lib.)

For example:

$ make CC=clang WITH_GMP_DIR=/opt/gmp update

Install Instructions

On typical platforms, installing MLton (after optionally performing make update) to /usr/local can be accomplished via:

$ make install

A small set of Makefile variables can be used to customize the installation:

  • PREFIX: Specify the installation prefix.

For example:

$ make PREFIX=/opt/mlton install

Resources

Need help? Found a bug?

Submit an issue if you need any help. We welcome pull requests with bug fixes or changes.

About

MLton with Realtime GC and Threading features

License:Other


Languages

Language:Standard ML 91.5%Language:C 5.2%Language:Emacs Lisp 0.9%Language:TeX 0.6%Language:Makefile 0.5%Language:Lex 0.4%Language:HTML 0.3%Language:Shell 0.3%Language:C++ 0.2%Language:OpenEdge ABL 0.1%Language:Batchfile 0.1%Language:Assembly 0.0%Language:Python 0.0%Language:Smalltalk 0.0%Language:Objective-C 0.0%