Standard ML of New Jersey
Release Notes


Version 2022.1
August 25, 2022


Summary

The main purpose of this release is to provide a baseline set of boot files for building from the GitHub repository. It also includes the bug fixes from legacy version 110.99.3 and a new implementation of the pattern-match compiler.

GitHub Migration

With this release, we have migrated the bug tracking infrastructure to a system using GitHub issues. We have prepopulated the issues for the legacy repository with the entries from the old 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

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

Installation

The config/install.sh script continues to work as before. We have added a -dev command-line option to enable cross compilation (i.e., it compiles LLVM for all of the supported target architectures).

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 old bug tracker.

Issue No. Description Gforge Bug

26

Garbage collection does not trigger sigGC

65

51

makeml and installml scripts do not like locations with spaces

90

141

Pretty printing of Absyn in error message does not respect fixity

141

205

Last branch of case expression omitted from PPAst

270

219

Compiler bug: Contract: UsageMap on 132

284

223

Incorrect pattern matching for exceptons

290

224

Signals are not delivered for corresponding events

291

239

Word8VectorSlice: mapping a subslice produces wrong result or crashes SML/NJ

306

240

SExpParser.parseFile should return empty list on empty file

307

241

Add function for converting HTML4.html to string

308

242

SExp: parsing the output of the printer produces a different SExp

309

243

Error when REPL tries to print value of type Posix.FileSys.ST.stat

310

244

Unable to interrupt execution by using SIGINT

311

245

CM.make is unable to handle filenames that contain a backslash

312

247

IEEEReal.setRoundingMode is a no-op on Linux

314

248

IEEEReal.float_class does not match the Basis Library

315

249

Real.fromManExp does not return expected value if man = 0.0

316

250

Conversion from string to real does not accept non-finite values

317

251

IEEEReal.decimal_approx does not match the Basis Library

318

252

Type of Real.fromDecimal does not match the Basis Library

319

The following unnumbered bug was also fixed:

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

The following bugs were reported for the legacy version, but do not affect the new versions.

Issue No. Description Gforge Bug

246

Real.fromLargeInt crashes on large integer input

313

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

macOS 11 (Big Sur)

Tested

macOS 12 (Monterey)

Tested

macOS 13 (Vecntura)