Standard ML of New Jersey
Release Notes
Version 110.90
June 12, 2019

SML/NJ HOME

  https://smlnj.org

FILES

  https://smlnj.org/dist/working/110.90/

## Summary

The primary purpose of this release is to bring the Windows port of SML/NJ up to parity with the Unix versions w.r.t. the 64-bit cleanup. It also provides a fix for a long dormant bug in CM that was exposed by the Basis reorganization in 110.88.

## Details

### Installation

While the installer for 110.90 works on macOS 10.14 Mojave, building from source requires some extra steps. Another issue that you may encounter when building on macOS 10.14 Mojave is an error message for a shell script of the form

      /bin/sh: bad interpreter: Operation not permitted

This error arises because the `com.apple.quarantine` attribute is set on the shell script. To fix the problem, remove the attribute using the command

      xattr -d com.apple.quarantine shell-script

and resume the build.

### Compiler

This compiler now supports a primitive type to represent pointers to runtime-system data structures. User-level access to this type is available via the `Unsafe.Pointer` structure. Note that these values (other than the null pointer) cannot persist across heap exports. In fact, exporting a heap that contains a pointer will result in an error message.

### Basis Library

This version implements the following Basis Library proposal:

[2019-001]

  Correction to the PRIM_IO signature— This proposal changes the return type of the `avail` function for readers to return `Position.int option`, instead of `int option` type.

### Runtime System

- The interface between the SML/NJ Basis code and the runtime system now uses unsigned 64-bit values to communicate time information (e.g., for the current time or file-modification timestamps). The Windows code that works with time and date values now uses the native Windows API, instead of the C-Library API.

- The handling of 32-bit values in the runtime system has been modified to allow for both boxed representations (on 32-bit machines) and tagged representations (on 64-bit machines).

- The runtime and Basis representation of the Microsoft `HANDLE` type has been abstracted over the target-machine word size. While this type is an alias for `void *`, the values are not actually pointers; therefore we represent them as boxed words of the native machine size.

## Bugs

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

222 | CM exports from imported library rather than from defined library

## 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 (32-bit) | 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
| macOS 10.14 (Mojave) | Tested
| Ubuntu 16.04.3 LTS | Tested
| Other Linux variants |
| BSD variants |
| Windows 7 |
| Windows 10 |
| Cygwin (32-bit) |

### A note about 64-bit support

Apple is in the process of deprecating 32-bit support in macOS. With macOS 10.14 Mojave, compiling 32-bit applications, such as the SML/NJ runtime system, requires using an older SDK. The SML/NJ installer, however, works without issue on macOS 10.14 Mojave.

We have been working on 64-bit support since 110.82 we expect to have it in place before the release of macOS 10.15.