Summary
This release is primarily a bug fix release with some additional runtime-system changes to help prepare for the planned switch to using an LLVM backend for the AMD64 target.
Version 110.98.1 was a patch release that addressed some of the pretty printing regressions introduced in 110.98. The release notes for those fixes are included here.
Also note that this release is the last 110 series release. We are switching our release numbering scheme to the format <year>.<relnum>, so the next release will be 2021.1.
Details
Compiler
The binary-file format used to store compiled code has been simplified by eliminating support for multiple code objects in a file (a feature that has not been used in many years). We have also changed the format of the "magic string" that is used to identify binfiles.
Runtime System
The boot loader was updated to work with the new binary-file format for code.
The layout of the stack frame used by SML code was changed to be compatible with the register spilling conventions used by LLVM. Specifically, the spill area is now at the top of the frame (i.e., at offset zero from the stack pointer and the various bits of stack-allocated state are at the bottom of the frame.
SML/NJ Library
Made a number of improvements to the pretty-printing library.
The PP_DEVICE
signature was extended with a number of additional
properties (max indentation, max depth, ellipses, …), as well
as functions for setting properties on a device. The pretty-printer
engine was updated to to use the max depth and max indentation
properties when rendering.
A new device module (CharBufferDev
) was added. This is a device
for pretty printing to a character buffer and is the device structure
that underlies the CharBufferPP
structure.
ML-LPT
Changed the semantics of the spans returned by ml-ulex so that the second component of a span is the position of the rightmost character in the token (instead of the character following the token). Specifically, the span \((p_1, p_2)\) specifies the \(p_2 - p_1 + 1\) characters that start with the character at position \(p_1\) and run to \(p_2\) (inclusive).
32-bit macOS issues
While the x86 installer for 110.99 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.
Another issue that you may encounter when building on macOs 10.14 Mojave is an error message for a shell script of the form
/bin/sh: bad interpreter: Operation not permitted
This error arises because the com.apple.quarantine
attribute is set on the
shell script. To fix the problem, remove the attribute using the command
xattr -d com.apple.quarantine shell-script
and resume the build.
Bugs
Here is a list of tracked bugs fixed (or closed) since 110.98 (including those patched in 110.98.1). Please see the bug tracker for more details.
254 |
|
266 |
Pretty printing regression in SML/NJ 110.98 |
267 |
Returns an incorrect result for a calculation on |
268 |
Polymorphic Type Pretty Printing Regression |
269 |
|
271 |
Pretty printer regression for structure binding |
274 |
Minor pretty printing glitch when printing structure specs |
276 |
Missing option to control extra newlines in REPL |
277 |
Excess white space when pretty printing a module signature |
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 |
Tested |
macOS 10.14 (Mojave) |
Tested |
|
macOS 10.15 (Catalina) |
Tested |
|
Ubuntu 16.04.3 LTS |
Tested |
|
Ubuntu 18.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) |
Tested |
|
macOS 10.13 (High Sierra) |
Tested |
|
macOS 10.14 (Mojave) |
Tested |
|
Ubuntu 16.04.3 LTS |
Tested |
|
Other Linux variants |
||
FreeBSD 12.0 |
Tested |
|
Other BSD variants |
||
Windows 7 |
||
Windows 10 |
||
Cygwin (32-bit) |
||
|