Standard ML of New Jersey
Version 110.81 NEWS
May 1, 2017

SML/NJ HOME:
  http://www.smlnj.org/index.html
FILES:
  http://smlnj.cs.uchicago.edu/dist/working/110.81/

### Summary:

This release has some fairly substantial under-the-hood changes to the compiler to clean up the interface between the front-end and FLINT, and changes to the compiler and runtime system to prepare the ground for 64-bit support. The release also contains some bug fixes and adds additional support for Successor ML, which is an evolution of the Standard ML language.

### Details:

Successor ML:

  The 110.81 release adds additional support for Successor ML syntactic extensions. It is now possible to use record-punning syntax in expressions (as well as in patterns); e.g., you can write the following function definition

  fun f x = {x}

  which is equivalent to

  fun f x = {x = x}

  And we have added support for do syntax in let bindings.

  We have also changed the way that Successor ML features are enabled from the REPL. Instead of assigning true to the Control.succML variable, one should use the function Control.setSuccML is used to enable or disable Successor ML (i.e., pass the argument true to enable Successor ML features).

Compiler

  This version eliminates dependencies on FLINT types in the front end. In particular, uses of PlambdaType have been eliminated.

SML/NJ Library:

  Added the JSONUtil module to the JSON library. This module provides helper functions for deconstructing and editing the tree (aka DOM) representation of a JSON file.

ml-lpt

  Added --debug command-line option to ml-antlr. This flag causes ml-antlr to generate debug actions that print the left-hand-side non-terminal of the production.

  Added %tokentype directive to ml-antlr, which allows user-defined datatypes to be used to represent tokens.

MLRISC:

  Changed the interface to AMD64Gen; the signBit and negateSignBit callback functions now return an MLTree.rexp (instead of a label).

### Bugs:

Here is a list of tracked bugs fixed (or closed) with this release, please see the bug tracker for more details.

129 | Symbolic identifiers are allowed as strids
149 | Datatype replication exposes hidden constructors
153 | Enabling Successor ML features is delayed
175 | Executable stack on Linux
179 | ml-ulex writing debug messages to stdOut

The following unnumbered bugs were also fixed:

- Parser bugfix: we now allow `*` as a field label in record-punning patterns.

### Supported systems:

> We have verified that the system builds and runs on the following systems.

> Architecture | Operating System
> --- | ---
> PowerPC | Mac OS X 10.5 (Leopard)
> x86 | Mac OS X 10.6 (Snow Leopard)
> | Mac OS X 10.7 (Lion)
> | Mac OS X 10.8 (Mountain Lion)
> | Mac OS X 10.9 (Mavericks)
> | Mac OS X 10.10 (Yosemite)
> | Mac OS X 10.11 (El Capitan)
> | macOS 10.12 (Sierra)
> | Ubuntu 14.04.3 (GNU/Linux 3.13.0)
> | Windows 7
> | Windows 10
> | Cygwin (hosted on Windows 7 or 10)

> We believe that it runs on any recent Linux distribution that has support for 32-bit executables, as well as on BSD variants, SPARC/Solaris, and PPC/AIX, but we have not tested these systems.