Standard ML of New Jersey
Version 110.83 NEWS
June 1, 2018

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

### 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.

### Details:

Basis Library:

  This version continues to track proposed Basis Library improvements. Note that these improvements are proposals that have not yet been ratified and are subject to change! Specifically, the following proposals are supported by this version of SML/NJ:

  [2018-001] Addition of monomorphic buffers
    This change adds the MONO_BUFFER signature to the Basis Library, with instances CharBuffer and Word8Buffer.

  We also fixed a number of cases where our implementation of Basis functions did not agree with the specification. See the list of bug fixes for details.

Compiler

  Changed the internal representation of real literals from strings to a more structured representation (see compiler/Basics/reals/ for the code).

  Changed the Absyn, PLambda, FLINT, and CPS IRs to represent integer and word literals as IntInf.int values. This change removes unnecessary complexity in code generation, improves constant folding, and lays the groundwork for 64-bit support.

  Improved the reporting of errors involving literal values. We now use the original source text when describing the value in the error message. We also report an error in the front-end when real literals are too large to be represented (instead of letting the code generator fail).

  Fixed a number of bugs where the compiler did not handle the language syntax as specified in the Definition. See the list of bug fixes for details.

### Bugs:

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

191 | Compiler crash when handling large reals
194 | Real.fromString overflows or hangs
201 | The AMD64.cm library is missing
206 | Parsing of explicit type variables and val rec is broken

The following unnumbered bugs were also fixed:

- Fixed the scanning of type variables to agree with the Definition (e.g., '1 and '_ are now accepted as type variables).
- Modified the parser to enforce the restriction that module-language identifiers must be alphanumeric (not symbolic).
- Modified the parser to disallow the rebinding of =. Note that we still allow the syntax val op = = ... because it is needed when bootstrapping the initial Basis environment.
- Fixed the behavior of Int.sameSign and Int32.sameSign to correctly handle the situation where one argument was zero and the other was greater than zero.
- Fixed the scanner to allow unmatched close comment sequences (e.g., (op *)(2,3)).
- Fixed the parser's handling of op combined with long identifiers.
- Fixed scanning of prefixes of word values in strings to match Basis Library specification ("0w" is not a valid prefix for hexadecimal values).
- Fixed Char.toCString to produce "\000" (instead of "\0") for the nul character.
- Fixed the scanner to produce the correct error message for bad escape sequences in string literals.
- Fixed parser to allow parentheses around val rec patterns.
- Fixed minor bug in Date.toString (missing leading "0" for day of month).

### 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) |
> | macOS 10.12 (Sierra) | Tested
> | macOS 10.13 (High Sierra) | Tested
> | Ubuntu 16.04.3 LTS | Tested
> | Other Linux variants |
> | BSD variants |
> | Windows 7 |
> | Windows 10 | Tested
> | Cygwin (hosted on Windows 7 or 10)