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
NativeIntandNativeWordstructure aliases to provide a portable way to refer to the native numeric types in signatures. -
Reimplementation of the
Randomstructure 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
HashSetFnandHashTableRepmodules) so that it does not depend onInt.intandWord.wordbeing the same size (an issue for MLton). Also split that code out into the internalMaxHashTableSizemodule. -
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
UTF8structure to impose stricter validation of the encodings (Issue 276). -
Modified the
JSON.jsondatatype to include theINTLIT of stringconstructor (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.smlhave unexpected regularities -
Thompson NFA regex engine doesn’t advance stream position when matching
-
CharBuffer.addSlicedoes not properly handle starting offsets -
HashSetFn’s calculation of `maxSizecan causeOverflowduring functor instantiation -
The word literal
0wx80000000is incorrectly converted to0wx7FFFFFFF80000000 -
The
ULexBuffer.getufunction did not handle 4-byte UTF-8 sequences in some situations. -
The
ULexBuffer.getufunction 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 |
|
|