Summary
This is a bug-fix release of the development version of SML/NJ. The most important fix is that the system now correctly supports Linux and the latest versions of macOS. This release also incorporates a number of fixes from the legacy version 110.99.4.
Details
Compiler
-
Reworked the handling of relocation patching to resolve issues with the ELF object-file format on Linux systems.
SML/NJ Library
-
Added the
NativeInt
andNativeWord
structure aliases to provide a portable way to refer to the native numeric types in signatures. -
Reimplementation of the
Random
structure to use the Mersenne Twister algorithm. There are both 32-bit and 64-bit versions of the generator (which one is included depends on the target platform). -
Reworked the code for determining the maximum hash-table size (used in the
HashSetFn
andHashTableRep
modules) so that it does not depend onInt.int
andWord.word
being the same size (an issue for MLton). Also split that code out into the internalMaxHashTableSize
module. -
Added support for the end-of-line assertion ("$") and full support for intervals to the Thompson engine in the RegExp library.
-
Added modules for the representation of booleans, integers, and words as hash-consed values to the HashCons library.
-
Reworked the
UTF8
structure to impose stricter validation of the encodings (Issue 276). -
Modified the
JSON.json
datatype to include theINTLIT of string
constructor (this change is to support future improvements to the JSON parsers).
Installation
Added macOS 14 (Sonoma) as a recognized system.
Bugs
Here is a list of the issues that are fixed (or closed) with this release.
Issue | Description |
---|---|
32 |
|
233 |
|
261 |
|
272 |
|
276 |
We also fixed the following bugs that did not have issues associated with them (or were bug fixes ported from the legacy repository):
-
Initial numbers generated by
Util/random.sml
have unexpected regularities -
Thompson NFA regex engine doesn’t advance stream position when matching
-
CharBuffer.addSlice
does not properly handle starting offsets -
HashSetFn’s calculation of `maxSize
can causeOverflow
during functor instantiation -
The word literal
0wx80000000
is incorrectly converted to0wx7FFFFFFF80000000
-
The
ULexBuffer.getu
function did not handle 4-byte UTF-8 sequences in some situations. -
The
ULexBuffer.getu
function did not reject surrogate halves or too-large codepoints.
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) |
Tested |
|
macOS 13 (Ventura) |
Tested |
|
macOS 14 (Sonoma) |
||
Ubuntu 20.04.6 LTS |
Tested |
|
Ubuntu 22.04.2 LTS |
Tested |
|
|