Summary
This patch release fixes a number of bugs in the "legacy" version of SML/NJ.
Details
MLRISC
Modified the way that zero-extension (ZX
) is handled when the source bit width is
smaller than the target. Previously, the code assumed that the high bits would be
zero, but as demonstrated by issue #272, this is not guaranteed,
so we now mask out the high bits.
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.
Installation
Added macOS 14 (Sonoma) as a recognized system.
32-bit macOS issues
While the x86 installer for 110.99.4 works on macOs 10.14 Mojave, building from source requires some extra steps because the version of Xcode distributed for Mojave does not include a 32-bit SDK.
Bugs
Here is a list of the issues and pull requests that are fixed (or closed) with this release. We include the original bug numbers for bugs that were reported using the gforge bug tracker.
Issue | Description | Gforge Bug |
---|---|---|
87 |
71 |
|
256 |
Initial numbers generated by |
n.a. |
258 |
Thompson NFA regex engine doesn’t advance stream position when matching |
n.a. |
260 |
64-bit word literals are parsed incorrectly on 32-bit systems |
n.a. |
264 |
n.a. |
|
266 |
n.a. |
|
267 |
n.a. |
|
272 |
Calling C function via NLFFI binding may give result outside range of its C return type |
n.a. |
278 |
|
n.a. |
279 |
|
n.a. |
The following unnumbered bugs were also fixed:
-
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 |
FreeBSD 12.0 |
|
macOS 10.14 (Mojave) |
Tested |
|
macOS 10.15 (Catalina) |
Tested |
|
macOS 11 (Big Sur) |
Tested |
|
macOS 12 (Monterey) |
Tested |
|
macOS 13 (Ventura) |
Tested |
|
macOS 14 (Sonoma beta) |
Tested |
|
Ubuntu 20.04.3 LTS |
Tested |
|
|
||
Power PC |
Mac OS X 10.5 (Leopard) |
|
AIX |
||
|
||
Sparc |
Solaris |
|
Linux |
||
|
||
x86 (32-bit) |
Mac OS X 10.6 (Snow Leopard) |
|
Mac OS X 10.7 (Lion) |
||
Mac OS X 10.8 (Mountain Lion) |
||
Mac OS X 10.9 (Mavericks) |
||
Mac OS X 10.10 (Yosemite) |
||
Mac OS X 10.11 (El Capitan) |
||
macOS 10.12 (Sierra) |
||
macOS 10.13 (High Sierra) |
||
macOS 10.14 (Mojave) |
||
Ubuntu 16.04.3 LTS |
||
Other Linux variants |
||
FreeBSD 12.0 |
||
Other BSD variants |
||
Windows 7 |
||
Windows 10 |
||
Cygwin (32-bit) |
||
|