Standard ML of New Jersey
Release Notes
Version 110.91
June 20, 2019

SML/NJ HOME

  https://smlnj.org

FILES

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

## Summary

This release is another checkpoint on the march to 64-bits. Most of the changes are related to porting the runtime system to build on the AMD64, but we have also made a few improvements elsewhere in the system.

## Details

### Installation

While the installer for 110.91 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

We added a new primop, `REAL_TO_BITS` that casts a floating-point value to the same-size word value. This primop allows the Assembly.logb function to be implemented in SML.

The `Target` structure defined in `Basis/mlcomp` now includes endianess information. This information was neede to implement the `REAL_TO_BITS` primop on 32-bit targets.

### Basis Library

We have added implementations of the optional Basis Library modules `PackWord64Big` and `PackWord64Little`.

We have also refactored the implementation of the `Math` structure to share common code across the versions that are specialized for different levels of hardware support.

### Runtime System

- The `mach-dep/assyntax.h` file, which provides a set of macros to allow the assembly code to work with both AT&T and GNU assembler syntax, has been replaced by `mach-dep/x86-syntax.h`. This new file has been stripped down to only cover the instructions actually used in the assembly code. Furthermore, it covers both the Unix and Windows assemblers, and both the x86 and amd64 architectures.

- Because we now assume C99 support, we can use the C Library functions `fegetround` and `fesetround` to control rounding modes. Therefore, we have removed these from the assembly code.

- With the compiler support for bitcasting a `real` value to `Word64.word`, we can implement the `logb` function in SML. Therefore, we have removed `logb` from the assembly code.

## Bugs

This release does not fix any known bugs.

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