Standard ML of New Jersey
Release Notes
Version 110.89
June 1, 2019

SML/NJ HOME

  https://smlnj.org

FILES

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

## Summary

This release continues the march toward 64-bit support. The main change is that the bindings of the `FixedInt`, `LargeWord`, and `Position` structure aliases are now 64-bit. This change will break code that assumes that these structures are the same as `Int32`, `Word32`, and `Int32` (respectively).

This version may be unstable, so we recommend sticking with Version 110.87 for production work. Also, we have not finished porting changes to the Windows version of the runtime system, so we are not releasing a Windows MSI file for this version.

## Details

### Installation

While the installer for 110.89 works on macOS 10.14 Mojave, building from source requires some extra steps.

### Compiler

- Fixed some bugs in the implementation of the `Word64` arithmetic operations.

- Simplified the code generator by removing disabled optimization features (memory disambiguation and GC types).

- Added missing contractions for `QUOT` and `REM` primops.

### Basis Library

- The `FixedInt`, `LargeWord`, and `Position` structures are now all 64-bit. Thus the `Int64` and `Word64` structures properly conform to the Basis Specification.
  Another effect of this change is that files that are over 230-1 bytes in size are now supported (bugs 33 and 36).

### MLRISC and NLFFI

- Fixed code that assumed that `LargeWord` and `Word32` are the same.

### Runtime System

- The runtime system was written assuming ANSI X3.159-1989 Standard C; in this releaser, we have added the use of inline functions, which where added in ISO C99. While Microsoft’s Visual Studio does not fully support the standard, it is generally compatible with the ISO C99.

- Allocation of small objects was previously implemented using macros; we now use inline functions. Inline functions are more robust and type safe, and also enable cleaner handling of 32-bit integers, which are boxed on 32-bit targets, but unboxed on 64-bit targets.

- Removed makefiles and code for arichtectures and operating systems that are no longer supported.

## Bugs

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

33 | Overflow exception with inputLine function
36 | Can’t open very large file

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