## MLton 20241230

# Release20180207

This is an archived public release of MLton, version 20180207.

## Changes since the last public release

- Compiler.

  - Added an experimental LLVM codegen (`-codegen llvm`); requires LLVM tools (`llvm-as`, `opt`, `llc`) version ≥ 3.7.

  - Made many substantial cosmetic improvements to front-end diagnostic messages, especially with respect to source location regions, type inference for `fun` and `val rec` declarations, signature constraints applied to a structure, `sharing type` specifications and `where type` signature expressions, type constructor or type variable escaping scope, and nonexhaustive pattern matching.

  - Fixed minor bugs with exception replication, precedence parsing of function clauses, and simultaneous `sharing` of multiple structures.

  - Made compilation deterministic (eliminate output executable name from compile-time specified `@MLton` runtime arguments; deterministically generate magic constant for executable).

  - Updated `-show-basis` (recursively expand structures in environments, displaying components with long identifiers; append `(* @ region *)` annotations to items shown in environment).

  - Forced amd64 codegen to generate PIC on amd64-linux targets.

- Runtime.

  - Added `gc-summary-file file` runtime option.

  - Reorganized runtime support for `IntInf` operations so that programs that do not use `IntInf` compile to executables with no residual dependency on GMP.

  - Changed heap representation to store forwarding pointer for an object in the object header (rather than in the object data and setting the header to a sentinel value).

- Language.

  - Added support for selected SuccessorML features; see http://mlton.org/SuccessorML for details.

  - Added `(*#showBasis "file" *)` directive; see http://mlton.org/ShowBasisDirective for details.

  - FFI:

    - Added `pure`, `impure`, and `reentrant` attributes to `_import`. An unattributed `_import` is treated as `impure`. A `pure` `_import` may be subject to more aggressive optimizations (common subexpression elimination, dead-code elimination). An `_import`-ed C function that (directly or indirectly) calls an `_export`-ed SML function should be attributed `reentrant`.

  - ML Basis annotations.

    - Added `allowSuccessorML {false|true}` to enable all SuccessorML features and other annotations to enable specific SuccessorML features; see http://mlton.org/SuccessorML for details.

    - Split `nonexhaustiveMatch {warn|error|igore}` and `redundantMatch {warn|error|ignore}` into `nonexhaustiveMatch` and `redundantMatch` (controls diagnostics for `case` expressions, `fn` expressions, and `fun` declarations (which may raise `Match` on failure)) and `nonexhaustiveBind` and `redundantBind` (controls diagnostics for `val` declarations (which may raise `Bind` on failure)).

    - Added `valrecConstr {warn|error|ignore}` to report when a `val rec` (or `fun`) declaration redefines an identifier that previously had constructor status.

- Libraries.

  - Basis Library.

    - Improved performance of `Array.copy`, `Array.copyVec`, `Vector.append`, `String.^`, `String.concat`, `String.concatWith`, and other related functions by using `memmove` rather than element-by-element constructions.

  - `Unsafe` structure.

    - Added unsafe operations for array uninitialization and raw arrays; see https://github.com/MLton/mlton/pull/207 for details.

  - Other libraries.

    - Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library

- Tools.

  - mlnlffigen

    - Updated to warn and skip (rather than abort) when encountering functions with `struct`/`union` argument or return type.

For a complete list of changes and bug fixes since Release20130715, see the `CHANGELOG.adoc` and Bugs20130715.

## 20180207 binary packages

- AMD64 (aka "x86-64" or "x64")

  - Darwin (.tgz) 16.7 (Mac OS X Sierra), dynamically linked against GMP in `/usr/local/lib` (suitable for Homebrew install of GMP)

  - Darwin (.tgz) 16.7 (Mac OS X Sierra), statically linked against GMP (but requires GMP for generated executables)

  - Linux, glibc 2.23

## 20180207 source packages

- mlton-20180207.src.tgz

## Also see

- Bugs20180207

- MLton Guide (20180207).

  A snapshot of the MLton website at the time of release.