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,PTRtandTAGt). 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
UMULandSMULoperators 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:
ROTLandROTR -
added
BITS_TO_FLOATandFLOAT_TO_BITSprimops -
added
FREMandFMADDprimops -
removed the
OFFSETexpression 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.SysInfostructure and changed theWIN32constructor toWINDOWS. -
added
charSizeandrealSizefunctions toUnsafestructure 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_SETinterface to make it more compatible with theORD_SETinterface. -
moved the
JSONstructure 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.castcauses Compiler bug) -
Merged Legacy pull request #349 (
PackReal64BigandPackReal64Littleexport internals) -
Merged fix for Legacy Issue #360 (Incorrect values returned by
Real.fromStringon strings with many digits) -
Merged fix for Legacy Issue #362 (
Real.fromStringon 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 |
|
|