Standard ML of New Jersey
Release Notes


Version 2025.2
July 29, 2025


Summary

This release is primarily a bug-fix release. In particular, we have addressed some of the teething issues in the new ARM64 support.

Details

Compiler

  • changed the way that GC invocation code is generated to not distinguish between different types that have uniform representation (i.e., LABt, PTRt and TAGt). This change results in significant shrinkage in the size of heap images and more closely matches the behavior of the old MLRISC code generator.

  • A number of changes to the CFG IR:

    • replaced the UMUL and SMUL operators with MUL, since the are all the same

    • renamed the shift operators to SHL, ASHR, and LSHR

    • added bit-counting operators: CNTPOP, CNTLZ, and CNTTZ

    • added bit-rotation operators: ROTL and ROTR

    • added BITS_TO_FLOAT and FLOAT_TO_BITS primops

    • added FREM and FMADD primops

    • removed the OFFSET expression form, since it is never generated.

  • Add a pass to eliminate redundant computation in the CPS IR. It needs more tuning, however, and so is currently disabled by default.

  • Changed the CPS IR to track the argument types of continuations.

Runtime System

  • changes to the LLVM code generator to match the CFG IR changes in the compiler.

Basis Library

  • removed deprecated functions from SMLofNJ.SysInfo structure and changed the WIN32 constructor to WINDOWS.

  • added charSize and realSize functions to Unsafe structure to enable more compile-time feature tests.

SML/NJ Library

In addition to several bug fixes (see below), the following changes were made to the SML/NJ Library:

  • Added a number of operations to the MONO_HASH_SET interface to make it more compatible with the ORD_SET interface.

  • moved the JSON structure from the JSON Library to the Util Library. This change was made to allow code to produce/consume JSON values without depending on the JSON library.

Bugs

Here is a list of the issues that are fixed (or closed) with this release.

Issue Description

292

SockUtil.recvVec behaviour does not match documentation

297

macOS installer does not initialize CM paths correctly

302

PPAbsyn raises exception when pattern matching on infix constructor

303

The exception IO.Io is not accessible

304

ElabCore regression for invalid application patterns

306

Extend inverse power of 5 table for Real.fromString

308

Fix IntBinarySet’s comparison operators to be like `BinarySetFn

310

IntBinarySet’s `union, intersection, and difference functions do not work correctly

311

Fix heap2exec

312

Compile error on Fedora 40 64-bit

We also fixed the following bugs that did not have issues associated with them (or were bug fixes ported from the legacy repository):

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)

macOS 12 (Monterey)

macOS 13 (Ventura)

macOS 14 (Sonoma)

macOS 15 (Sequoia)

Tested

Ubuntu 20.04.6 LTS

Ubuntu 22.04.2 LTS

Tested

Windows WSL

 

ARM64

macOS 11 (Big Sur)

macOS 12 (Monterey)

macOS 13 (Ventura)

macOS 14 (Sonoma)

macOS 15 (Sequoia)

Tested