Standard ML of New Jersey Version 107, December 25, 19934 ------------------------------------------------ STANDARD ML OF NEW JERSEY COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. Copyright 1989, 1990, 1991, 1992, 1993, 1994 by AT&T Bell Laboratories Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of AT&T Bell Laboratories or any AT&T entity not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. AT&T disclaims all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall AT&T be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. ------------------------------------------------ Version 107 of Standard ML of New Jersey (SML/NJ) is an internal working version that is probably stable enough for use by brave souls. The transition from Version 93 to the next general release involves a complete reworking of almost the entire system. Version 107 is perhaps 80% of the way there, but there are still changes to come. This version works on the following machine/OS combinations: MIPS; Irix 4.x MIPS; Irix 5.x SPARC; SunOs 4.x SPARC; Solarix 2.x Alpha; OSF/1 (V 2.0 or later; does not work under V 1.3) RS/6000; AIX 3.x (may work on AIX 4.x, but we haven't tested it) x86; Linux x86; FreeBSD (thanks to Jeffrey Hsu) Here is a list of the files in the distribute. Note that, unlike in previous versions, you do not need the compiler source (107-sml-nj.tar.Z) to install the system. 107-README This file 107-INSTALL Installation instructions 107-notes.tar.Z Misc. documentation. 107-config.tar.Z Configuration/installation scripts (REQUIRED) 107-ml-yacc.tar.Z ML-Yacc source 107-ml-lex.tar.Z ML-Lex source 107-ml-burg.tar.Z ML-Burg source 107-smlnj-lib.tar.Z SML/NJ Library source 107-cml.tar.Z CML source 107-eXene.tar.Z EXene source 107-runtime.tar.Z Run-time system source (REQUIRED) Compiler binaries for specific architectures: 107-bin.mipseb.tar.Z Big endian MIPS binaries 107-bin.sparc.tar.Z Sparc binaries 107-bin.alpha32.tar.Z Alpha binaries 107-bin.rs6000.tar.Z RS/6000 binaries 107-bin.x86.tar.Z Intel x86 binaries. KNOWN BUGS In addition to reported open bugs, version 107 suffers from the following problems: - there is essentially no documentation (what little there is can be found in the notes directory). - stopping sml using ^Z and then restarting it causes sml to lose contact with the terminal input stream under Irix 4.0.5. This doesn't appear to be a problem with Irix 5.x. - Unsigned division (and thus printing of unsigned numbers) doesn't work on the SPARC. - Big unsigned constants (> 2^30) are unsupported and can cause the system to dump core. CHANGES FROM 106 to 107 Most of the changes are compiler improvements and bug fixes. Most of the visible changes have to do with a reorganization of the ML callable C code. - eXene has been ported to 107, and a snapshot is included in the release. This is very much a working version, but there is some high-level documentation in eXene/README. - the function System.Unsafe.CInterface.c_string has been deleted (ML strings are always NULL terminated in 107). Also, the type of c_function has changed. - the function System.Unsafe.CInterface.syscall has been eliminated. - the implementation of System.Directory.getWD has been fixed. We now use the POSIX getcwd() to implement this. - The ML callable C library in the run-time has been split into a collection of libraries, which are organized by related function. This organization should make it somewhat easier to add C code to the system. See the file notes/HOWTO-ADD-C-CODE for more information. CHANGES FROM 103 to 106 The last working version that was made available via ftp was 103; here is a list of the major changes since then: - Version 106 uses a new run-time system with a multi-generational collector. This affects users and installers of the system in several significant ways: - The new run-time separates the run-time executable from the ML heap images. This means that an application (e.g., sml-sc) consists of a run-time system and a heap image. The run-time executables depend on the architecture and OS, while the heap image depends on the application and architecture. There is a standard driver shell script that gets created as part of the installation process (see the 106-INSTALL file for details). The "exportML" and "exportFn" commands generate heap images. - The new collector tends to use more virtual memory than the old collector, but less physical memory. The virtual memory performance will be improved before the next release, but you may have trouble running this on machines with small swap spaces. - Version 106 supports characters as a first class type. Character literals are written as length one strings preceeded by "#" (e.g., #"a", #" ", #"\"", #"\128"). The structure Char defines various operations on characters. As a result of this change, the signature of the String structure has changed. In particular, the functions String.length, String.ord and String.ordof no longer exist, and the functions implode and explode have different types. The old versions can be defined roughly as follows: val length = String.size val ordof = Char.ord o String.sub fun ord s = ordof(s, 0) val explode = (map Char.ord) o String.explode val implode = String.implode o (map Char.chr) The Ord exception is no longer raised, instead Subscript is raised. Also, the Chr exception has been moved to the Char structure. - As a result of the changes to the String and the addition of the Char structure, ML-Lex, ML-Yacc, the SML/NJ Library, and CML have been changed. In the case of ML-Lex and ML-Yacc, you will have to regenerate your parsers/scanners using the new version, if you want to use 106. There were significant changes to some of the interfaces in the SML/NJ library (e.g., CType, CharSet), but the changes to CML are all internal. We haven't ported eXene to 106 yet, but that will be done soon. - Version 106 has a different signature for the Array and Vector structures. The exceptions Subscript and Size have been moved to the General structure. - Version 106 has generic monomorphic array and vector signatures (MONO_ARRAY and MONO_VECTOR). Currently, the only implementation of these are the CharVector and CharArray types, but the RealArray structure will be switched over soon. The type CharVector.vector is the same as String.string. - Versions are now numbered as integers (i.e., 106 instead of 1.06). The signature of Compiler.Version has changed. - The get_fd_out function was removed from the IO signature. CHANGES FROM 0.93 to 1.03 - The top-level environment was restructured; stuff that used to be in System has been split into System and Compiler. Note that the System side of this split is definitely NOT stable; it will change again in substantial ways. - The bootstrapping process has changed radically from version 0.93. If you don't know about sml-scb and "bin files", this version is probably not for you. - The "source groups" tool has been replaced with "SC", which generally works better.