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
andTAGt
). 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
andSMUL
operators withMUL
, since the are all the same -
renamed the shift operators to
SHL
,ASHR
, andLSHR
-
added bit-counting operators:
CNTPOP
,CNTLZ
, andCNTTZ
-
added bit-rotation operators:
ROTL
andROTR
-
added
BITS_TO_FLOAT
andFLOAT_TO_BITS
primops -
added
FREM
andFMADD
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 theWIN32
constructor toWINDOWS
. -
added
charSize
andrealSize
functions toUnsafe
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 theORD_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 |
|
297 |
|
302 |
|
303 |
|
304 |
|
306 |
|
308 |
Fix |
310 |
|
311 |
|
312 |
We also fixed the following bugs that did not have issues associated with them (or were bug fixes ported from the legacy repository):
-
Fixed a bug in the arm64 assembly code for
Assembly.A.scalb
-
Fixed an infinite loop that could occur when clustering the first-order CPS functions prior to generating the CFG IR.
-
Merged fix for Legacy Issue #347 (
Unsafe.cast
causes Compiler bug) -
Merged Legacy pull request #349 (
PackReal64Big
andPackReal64Little
export internals) -
Merged fix for Legacy Issue #360 (Incorrect values returned by
Real.fromString
on strings with many digits) -
Merged fix for Legacy Issue #362 (
Real.fromString
on negative inf/infinity returns positive infinity) -
Merged fix for Legacy Issue #363 ("default word size" in the documentation for Util/Random)
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 |
|
|
||
ARM64 |
||
macOS 11 (Big Sur) |
||
macOS 12 (Monterey) |
||
macOS 13 (Ventura) |
||
macOS 14 (Sonoma) |
||
macOS 15 (Sequoia) |
Tested |
|
|