The master copy of the SML/NJ web pages is now kept in the CVS repository of the smlnj SourceForge project (see previous item on SourceForge projects). The Bell-Labs-hosted site is now joined by www.smlnj.org, which mirrors the same pages from the repository.
The recently released 110.33 working version runs under Mac OS X. It also introduces Matthias Blume's new, experimental FFI, NLFFI ("No-Longer Foreign Function Interface"). Currently NLFFI is available only under x86-linux, but it is being ported to other architectures.
The original version of the Windows installer, smlnj.exe, for 110.0.7 had a problem when running under Windows 95/98/ME that caused error messages abound undefined strings like PRODUCT_NAME. This problem has been corrected in a new smlnj.exe now available in the usual 110.0.7 ftp and http distribution directories.
This new smlnj.exe (as of 23 March 01) also corrects a problem where installation only set the user PATH and CM_PATH environment variables. Now the installer sets these variables at the system level for all users. Installation must be done from an administrator account.
Two new SML-related projects have been started at SourceForge, a site and organization supporting collaborative development of open-source software. The Standard ML (sml) project at www.standardml.org supports all Standard ML implementations by encouraging sharing of resources such as test suites, benchmarks, libraries, and documentaion. The Standard ML of New Jersey (smlnj) project at www.smlnj.org is intended to be the future home of SML/NJ (including web pages, releases, CVS repository, etc.).
Riccardo Pucella has written an extensive new tutorial, Notes on Programming SML/NJ, which is available as postscript or PDF. This is a first draft of the Notes, and Riccardo welcomes corrections and suggestions.
Stefan Monnier's latest version, 3.9.5, of the sml-mode package for emacs has been added to the contrib/emacs directory.
A new minor release version 110.0.7 is now available. This is the sixth patch release for version 110 (110.0.4 was not released). This patch release fixes a long-standing bug in signal handling. It also includes a number of SML/NJ Library enhancements and fixes and some fixes to CM and eXene, and a small number of other bug fixes. See the 110-PATCH-HISTORY file for details. With this release, we are also making the distribution files available for download via http as well as ftp. See the 110.0.7 distribution page. [Note: The original smlnj.exe installer for Windows had incorrect CM tool paths. This has been corrected by a new smlnj.exe as of October 18, 2000.]
Meanwhile, work continues on the next release, which we hope to have ready for a beta release "real soon now". The next release will not contain any major language or Basis library changes, but there will be major internal changes, including:
In addition, there will be a couple significant language extensions: lazy datatypes and lazy functions over such datatypes, functional record concatenation (a "with" operation), and mutable records whose fields can be updated.
- A new runtime system with improved management of virtual memory.
- New support for foreign functions (C) based on IDL.
- Conformance with the soon to be published SML Basis spec.
- MLRISC code generators for all architectures.
- The FLINT representation has partially replaced the old cps representation in the back end.
Most features of Version 111 are implemented in current working versions. The main missing elements are the new runtime system and a MIPS code generator.
The latest working version (110.60) fixes a signal-handling problem on Intel-based Macs and comes with two new program-generator tools (ml-ulex and ml-antlr). It also brings MLRISC-support for AMD64 and uses a new directory layout. Beginning with 110.60, the master source repository uses subversion and is no longer hosted by SourceForge. The previous working version (110.59) provided bugfixes and minor improvements, following the previous version (110.58) which added support for Intel-based Macs as well as x86-64-based Linux machines and came with lexgen, a brand-new drop-in replacement for ml-lex. The version before that (110.57), much like its predecessors 110.56, 110.55, 110.54, 110.53 and 110.52, fixed various bugs and provided minor feature enhancements. The version before that, 110.51, mostly consisted of the addition of an (inefficient) implementation of 64-bit integer arithmetic to its predecessor. 110.50 provided bugfixes to NLFFI on x86, improved support for back-tracing, added a simple test coverage tool and had minor improvements to other parts of the system. The earlier 110.49 came hot on the heels of 110.48. These two versions were bugfix releases on 110.47, which featured a preliminary implementation of the NLFFI foreign function interface under Mac OS X and under Microsoft Windows. (NLFFI was previously available under x86/Linux and Sparc/Solaris only.) The preceding version (110.46) was another step to spec compliance for the Basis Library. It also fixed a number of bugs and improved the win32 port by adding some previously missing functionality to the runtime system. Earlier, 110.45 fixed some installation problems caused by incompatibilities with GCC 3.3. Before that, 110.44 brought our implementation of the Basis library closer to the specification, fixed several important bugs, and provided support for Mac OS X 10.3 (Panther). The previous working release (110.43) offered an operational win32 port, added IntInf support to compiler and Basis library, and also updated many interfaces of the Basis according to the latest draft of the specification. Earlier, 110.42 resolved a problem with a CML memory leak supported MacOS X 10.2 (Jaguar). The previous update (110.41) fixed--along with some other bugs--a long-standing memory leakage problem in the garbage collector. However, the volume of changes paled in comparison to its predecessor version 110.40, which came with many bugfixes and improvements to libraries and has seen much work in the MLRISC backend. There were also numerous updates to many other parts of the system. 110.40 succeeded a mostly-bugfix release (110.39) and built on 110.38 which provided internal improvements to MLRISC and overhauled the FFI. The version before that (110.37) came with some enhancements to CM and more improvements to the MLRISC backend. All working releases since 110.35 are based on a new organization of compiler source code into CM libraries, run under the new Mac OS X, include Matthias Blume's new, experimental FFI (NLFFI) for x86-linux (and now sparc) and support CML as well as eXene.
Since working version 110.9.1, major internal changes have been implemented and many changes are still in progress. Version 110.12 introduced fundamental changes in array, vector and string representations and a new garbage collector interface. Extensive changes have also been made to the ML-RISC code generators.
Starting with 110.20, a major overhaul of the CM compilation manager has been in progress, accompanied with a reorganization of the compiler itself into a set of libraries.
The next working release will incorporate an updated version of the FLINT middle end. At this point, we will change the way the code is managed by having a publically accessible CVS repository at Yale.
As usual, use the working versions at your own risk. Some working versions incorporate substantial changes that reduce stability and introduce bugs.