Standard ML of New Jersey
Release Notes
Version 110.99.3
July 27, 2022

SML/NJ HOME

  https://smlnj.org

FILES

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

## Summary

This patch release fixes a large number of bugs in the "legacy" version of SML/NJ and adds some new functions to the SML/NJ Library.

## GitHub Migration

With this release, we have migrated the legacy branch from our own svn server to a GitHub repository. This migration is the first step in migrating everything to GitHub.

In addition, we have retired the gforge bug-tracking infrastructure in favor of using GitHub issues. We have prepopulated the issues for the legacy repository with the entries from the gforge bug database.

Since issues are associated with a repository, we now have separate trackers for the legacy and main development versions. While most bugs that are present in one version will also be present in the other version, it is not necessary to create two issues when reporting a bug.

## Details

### Basis Library

Added support for the following proposed Basis Library extensions:

- 2021-001 Add getWindowSz function to Posix.TTY structure

- 2022-001 Add value tau to MATH signature

### SML/NJ Library

- Added the `findAndRemove` function to `ORD_MAP` interface.

- Generalized comparisons on ordered maps; added `equiv` and `extends` functions to `ORD_MAP` interface and made the type of `collate` more polymorphic.

- The SExp library now uses Scheme syntax for string values.

- The SExp parser accepts empty files as valid input (producing an empty list of S-Expressions).

### Windows

The MSI installer now correctly sets the version of SML/NJ (see issue 59 for details). We also add a shortcut for uninstalling SML/NJ to the Program Menu.

### 32-bit macOS issues

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

## Closed Issues

Here is a list of the issues that are fixed (or closed) with this release. We include the original bug numbers for bugs that were reported using the gforge bug tracker.

Issue No. | Description | Gforge Bug
--- | --- | ---
43 | smlnj installation: error in first cm file memory.cm from nlffi | 283
44 | Compiler bug: Contract: UsageMap on 132 | 284
48 | Signals are not delivered for corresponding events | 291
58 | ml-build fails on Windows with error | 301
59 | MSI installer for SMLNJ 110.99.2 reports as version 0.0.0.0 | 302
60 | Use raises wrong exception | 303
63 | Word8VectorSlice: mapping a subslice produces wrong result or crashes SML/NJ | 306
64 | `SExpParser.parseFile` should return empty list on empty file | 307
65 | Add function for converting `HTML4.html` to string | 308
66 | SExp: parsing the output of the printer produces a different SExp | 309
67 | Error when REPL tries to print value of type `Posix.FileSys.ST.stat` | 310
68 | Unable to interrupt execution by using `SIGINT` | 311
69 | `Real.fromLargeInt` crashes on large integer input | 313
70 | `IEEEReal.setRoundingMode` is a no-op on Linux | 314
71 | `IEEEReal.float_class` does not match the Basis Library | 315
72 | `Real.fromManExp` does not return expected value if `man = 0.0` | 316
73 | Conversion from string to real does not accept non-finite values | 317
74 | `IEEEReal.decimal_approx` does not match the Basis Library | 318
75 | Type of `Real.fromDecimal` does not match the Basis Library | 319
81 | Garbage collection does not trigger `sigGC` | 65
103 | makeml and installml scripts do not like locations with spaces | 90
177 | Pretty printing of Absyn in error message does not respect fixity | 204
241 | Last branch of case expression omitted from `PPAst` | 270
253 | `CM.make` is unable to handle filenames that contain a backslash | 312

The following unnumbered bug was also fixed:

- Performance bug in the compilation of deeply-nested modules.

## 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 |
| macOS 10.14 (Mojave) | Tested
| macOS 10.15 (Catalina) | Tested
| macOS 11 (Big Sur) | Tested
| macOS 12 (Monterey) | Tested
| macOS 13 (Ventura) |
| Ubuntu 16.04.3 LTS |
| 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) |
| macOS 10.13 (High Sierra) |
| macOS 10.14 (Mojave) |
| Ubuntu 16.04.3 LTS |
| Other Linux variants |
| FreeBSD 12.0 |
| Other BSD variants |
| Windows 7 |
| Windows 10 |
| Cygwin (32-bit) |