Standard ML of New Jersey
Version 110.82 NEWS
October 16, 2017

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

### Summary:

This release continues the march toward 64-bit support (it looks to be a long march). There are many under-the-hood changes to the compiler to make supporting both 32-bit and 64-bit targets possible, as well as a number of bug fixes. It also adds support for macOS 10.13 (High Sierra).

### Details:

Compiler

  Rationalized the treatment of primitive operators in Absyn and FLINT, and removed unused primitive operators. These changes affected the pickle format, which means that the --rebuild option must be used when building the compiler from sources.

  Added Target structure to Basics; this module specifies properties of the target, such as the size of ML values and the size of the default int type.

  Changed the way that the InlineT structure is defined to be target sensitive. For example, on 32-bit targets, there will be an InlineT.i31add function for adding the default int type, whereas on 64-bit targets the corresponding function will be InlineT.i63add.

  Restored the pre-110.80 behavior of having the shell command sml foo.sml return a non-zero exit status when there is an error in the compilation of foo.sml (bug #183).

Run-time system

  Changed the way that we test for allocation-space addresses in minor GCs. Instead of using the BIBOP, we now do a pointer range test; this change produces a small speedup on 32-bit machines, but we expect a bigger benefit on 64-bit machines, which use the 2-level BIBOP.

  Various changes to prepare for 64-bit targets, including adding a 2-level BIBOP implementation, and splitting assyntax.h into 32-bit (assyntax.h) and 64-bit (assyntax64.h) versions.

### Bugs:

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

123 | missing warning for non-exaustive binding at top level.
183 | status code returned by sml REPL.
185 | Bring command line help text into parity with man page.

The following unnumbered bugs were also fixed:

- JSON Library: printing of strings was fixed to match JSON specification.
- Eliminated false positives in assertion checking in build-literals.c. Also fixed a bookkeeping bug in the tracking of available space in build-literals.c.
- Fixed a bug in the IntInf.mod and IntInf.rem operators, where the Div exception was not getting raised when both arguments are zero.
- Fixed a runtime-system build issue on macOS for the situation where Xcode in installed, but /usr/include does not exist.

### Supported systems:

> We believe that SML/NJ will build and run on the following systems, but have only tested some of them:

> Architecture | Operating System | Status
> --- | --- | ---
> Power PC | Mac OS X 10.5 (Leopard) |
> | AIX |
> Sparc | Solaris |
> | Linux |
> 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) | Tested
> | macOS 10.12 (Sierra) | Tested
> | macOS 10.13 (High Sierra) | Tested
> | Ubuntu 14.04.3 (GNU/Linux 3.13.0) | Tested
> | Other Linux variants |
> | BSD variants |
> | Windows 7 |
> | Windows 10 | Tested
> | Cygwin (hosted on Windows 7 or 10)