Standard ML of New Jersey
Release Notes
Version 110.96
December 13, 2019

SML/NJ HOME

  https://smlnj.org

FILES

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

## Summary

This release fixes a couple of scripting bugs related to supporting both 32 and 64-bit versions of the system, as well as some other 64-bit-related issues. It also adds 64-bit support for FreeBSD.

## Details

### Installation

#### 64-bit support

The various installation and configuration scripts have been updated to accept a command-line argument to override the default machine size when running on the x86/amd64 architecture. For the `config/install.sh` script, you can specify the machine-word size of the target architecture as follows:

-default size

  specify the default size for the sml and other commands, where size is either 32 or 64.

-32

  install the 32-bit version of the system.

-64

  install the 64-bit version of the system.

It is possible to install both versions in the same location by running the `install.sh` script twice. For example, the commands

      % config/install.sh -32
      % config/install.sh -default 64

will install both versions with the 64-bit version as default. One would then use the command sml -32 to run the 32-bit version of the system.

If both versions are installed, then use the -32 or -64 flag to override the default version.

#### 32-bit macOS issues

While the x86 installer for 110.96 works on macOs 10.14 Mojave, building from source requires some extra steps because the version of Xcode distributed for Mojave does not include a 32-bit SDK.

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.

### MLRISC

Fixed a bug in the way that floating-point comparisons were being generated for the AMD64 target. This was the root cause of bug 234, but could affect other code.

### Runtime System

We now use POSIX signal handling on FreeBSD (instead of the "Traditional BSD" signal handling).

### ML-LPT

The `AntlrStreamPos` structure now has a `FilePos` substructure that has the `INTEGER` signature. This substructure defines the representation type for positions and can be used to write code that will be portable against any future changes in that type (e.g., the switch from `Position.int` to `int` in 110.94).

## Bugs

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

168 | `heap2exec` broken on 64-bit machines with default toolchains
233 | eXene build fails for 64bit install
234 | Converting NaN to a string causes an infinite loop on 64-bit machines
235 | Mac OS Catalina Compilation Failure
236 | Unable to package smlnj for 64-bit x86, for Arch Linux
237 | heap2exec script fails on 110.95

The following unnumbered bug was also fixed:

- Fixed a problem where a control-C (`SIGINT`), or other signal, might be ignored.

## 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
--- | --- | ---
AMD64 | FreeBSD 12.0 | Tested
| macOS 10.14 (Mojave) | Tested
| macOS 10.15 (Catalina) | Tested
| Ubuntu 16.04.3 LTS | Tested
| Ubuntu 18.04.3 LTS | Tested
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 |
| FreeBSD 12.0 | Tested
| Other BSD variants |
| Windows 7 |
| Windows 10 |
| Cygwin (32-bit) |