Standard ML of New Jersey Release Notes

Standard ML of New Jersey
Release Notes
Version 110.99
December 24, 2020

SML/NJ HOME

  https://smlnj.org

FILES

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

## Summary

This release is primarily a bug fix release with some additional runtime-system changes to help prepare for the planned switch to using an LLVM backend for the AMD64 target.

Version 110.98.1 was a patch release that addressed some of the pretty printing regressions introduced in 110.98. The release notes for those fixes are included here.

Also note that this release is the last 110 series release. We are switching our release numbering scheme to the format <year>.<relnum>, so the next release will be 2021.1.

## Details

### Compiler

The binary-file format used to store compiled code has been simplified by eliminating support for multiple code objects in a file (a feature that has not been used in many years). We have also changed the format of the "magic string" that is used to identify binfiles.

### Runtime System

The boot loader was updated to work with the new binary-file format for code.

The layout of the stack frame used by SML code was changed to be compatible with the register spilling conventions used by LLVM. Specifically, the spill area is now at the top of the frame (i.e., at offset zero from the stack pointer and the various bits of stack-allocated state are at the bottom of the frame.

### SML/NJ Library

Made a number of improvements to the pretty-printing library. The `PP_DEVICE` signature was extended with a number of additional properties (max indentation, max depth, ellipses, …​), as well as functions for setting properties on a device. The pretty-printer engine was updated to to use the max depth and max indentation properties when rendering.

A new device module (`CharBufferDev`) was added. This is a device for pretty printing to a character buffer and is the device structure that underlies the `CharBufferPP` structure.

### ML-LPT

Changed the semantics of the spans returned by ml-ulex so that the second component of a span is the position of the rightmost character in the token (instead of the character following the token). Specifically, the span \((p_1, p_2)\) specifies the \(p_2 - p_1 + 1\) characters that start with the character at position \(p_1\) and run to \(p_2\) (inclusive).

### 32-bit macOS issues

While the x86 installer for 110.99 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.

## Bugs

Here is a list of tracked bugs fixed (or closed) since 110.98 (including those patched in 110.98.1). Please see the bug tracker for more details.

254 | `Real.fromLargeInt` produces negative results
266 | Pretty printing regression in SML/NJ 110.98
267 | Returns an incorrect result for a calculation on `Position.int` for 32-bit mode.
268 | Polymorphic Type Pretty Printing Regression
269 | `Word64.fromString` causes an `Overflow` for greater than 232-1
271 | Pretty printer regression for structure binding
274 | Minor pretty printing glitch when printing structure specs
276 | Missing option to control extra newlines in REPL
277 | Excess white space when pretty printing a module signature

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