Standard ML of New Jersey
Version 110.79 NEWS
October 4, 2015

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

### Summary:

This release is fairly substantial and incudes new Basis Library modules and the start of support for Successor ML, which is an evolution of the Standard ML language. It also has support for the latest version of Mac OS X (El Capitan) and Linux 4.x kernels, and many bug fixes.

### Details:

Compiler:

  The compiler is somewhat faster (about 7% when compiling itself).

Basis Library:

  This version implements a number of proposed improvements to the Basis Library. 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:

  [2015-001] Correction to ListPair
    SML/NJ already implemented the semantics described in this proposal.
  [2015-002] Addition of Either module
    This change adds the Either structure to the Basis Library.
  [2015-003] Additional operations on sequences
    This change adds operations to the Array, List, ListPair, Option, and Vector structures, and to the MONO_ARRAY and MONO_VECTOR signatures.
  [2015-005] Addition of Fn module
    This change adds the Fn structure to the Basis Library.
  [2015-007] Addition of Ref module
    This change adds the Ref structure to the Basis Library.
  [2015-009] Policy for exceptions and partial applications
    This change standardizes the generation of exceptions when partially applying curried basis functions. The change fixed bug 136.

  It is very unlikely that these changes will break existing code, but there are a couple of scenarios in which the code might break. The first is conflicts created by the use of open. For example, the implementation of ml-yacc had declarations of the form

  open Array List

  which created a type error because List.sub shadowed Array.sub.

  The second class of problem is when a module implements one of the affected Basis signatures. For example, the MLRISC library had two modules that implemented extensions of the ARRAY signature and which required modification to compile.

  In such cases, we recommend updating the source code, but it is also possible to compile against the old version of the Basis Library by changing the line

  $/basis.cm

  to

  $/basis-2004.cm

  in your CM files. Note that backward-compatible version of the Basis Library is only available if the `old-basis` target in `config/targets` was requested when SML/NJ was built (this target is requested by default).

  We have also added implementations of the following optional Basis Library structures:

  structure PackReal64Big : PACK_REAL structure PackReal64Little : PACK_REAL structure PackRealBig : PACK_REAL structure PackRealLittle : PACK_REAL

SML/NJ Library:

  Added additional array operations toList, fromVector, and toVector to BitArray module so that it matches the new proposed Basis Library specification.

Concurrent ML:

  Added the additional Basis Library modules described above to the CML version of the library.

Successor ML:

  Successor ML is collection of proposed enhancements to the Standard ML language. In collaboration with the MLton implementors, we are starting to add support for these features the SML/NJ. In this release, we have added support for the lexical extensions to the language:

  - Allow underscore ("_") as a separator in numeric literals; e.g., 123_456, 0wxff_ff_ff_f3, 123_456.1, ...
  - end-of-line comments, which are denoted using (*). End-of-line comments properly nest into conventional block comments. For example, the following block comment is well formed:
    (* fun f x = x (*) my identity function *) *)
  - binary literals for both integers and words; e.g., 0b0101_1110, or 0wb1101.

  These features can be enabled using the command-line option `-Cparser.succ-ml=true` or by using the assignment

  Control.succML := true;

  at the REPL. It is also possible to mark individual source files as being "Successor ML" sources in a CM file. There are several ways to do so; the easiest is to specify that they should be handled by the "`succ-ml`" tool:

  foo.sml : succ-ml

  Alternatively, one can give the "`succ-ml`" argument to the "`sml`" tool:

  foo.sml : sml (succ-ml) foo.sml (succ-ml)

  It is also possible to enable them by setting the control flag using the with keyword in a CM file as illustrated by the following equivalent forms:

  foo.sml (with: parser.succ-ml) foo.sml (with: parser.succ-ml=true) foo.sml (with:(name:parser.succ-ml)) foo.sml (with:(name:parser.succ-ml value:true))

### Bugs:

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

45 | Compiler bug in specialize phase
53 | psfig.sty is deprecated, use epsfig.sty wrapper or graphicx.sty
82 | Implementations of PACK_REAL missing
131 | ml-ulex does not allow comments in %states directives
134 | Fails to build with Linux kernel 4.x
135 | Fails to build on Linux PowerPC
136 | Incorrect raising of exceptions in Real.fmt and Time.fmt
137 | Adapt Linux PPC build to use mkstemp instead of tmpnam
138 | Incorrect behavior for Date.fromTimeLocal
139 | Date.date is broken
140 | Lookup failure in closure.sml when compiling Twelf

### 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)
> | Ubuntu 12.04.4 (GNU/Linux 3.2.0)
> | Windows 7
> | Cygwin (hosted on Windows 7)

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