db@cs.ed.ac.uk (Dave Berry) (06/11/91)
This is my (recently updated) information file on Standard ML. Please let me know of any corrections or additions. Dave Berry. CONTENTS: INTRODUCTION, THE DEFINITION, TEXTS, COURSES, MAILING LIST, LIBRARY, CURRENT IMPLEMENTATIONS, WORK IN PROGRESS, OBSOLETE IMPLEMENTATIONS. INTRODUCTION Standard ML is a statically scoped interactive functional language with a polymorphic static type system, polymorphic references, polymorphic exceptions, a sophisticated modules system and a formal semantics. The ML project won the British Computer Society's Technical Award for 1987. It is a general purpose programming language which is currently used for formal verification, VLSI work, microprocessor design, graphical interfaces, and compilers. THE DEFINITION. Robin Milner, Mads Tofte and Robert Harper The Definition of Standard ML MIT, 1990. Robin Milner and Mads Tofte Commentary on Standard ML MIT, 1991 The Commentary is a companion to the definition. It explains some of the design choices and some delicate parts of the Definition. It also presents some propertires of the language, with the associated proofs. TEXTS. The first book is quite slow-paced and is aimed at people learning to program. It doesn't cover the modules system. Ake Wikstrom Functional Programming Using Standard ML Prentice Hall 1987 ISBN: 0-13-331661-0 The next book goes at a faster pace, and includes an introduction to the modules system. It also includes sections on denotational semantics, lambda calculus and implementation techniques. Chris Reade Elements of Functional Programming Addison-Wesley 1989 ISBN: 0-201-12915-9 The following report is available from the LFCS (Dorothy McKie, dam@ecsvax.ed.ac.uk) and costs 5 pounds or 10 US dollars. It covers all of Standard ML. Robert Harper Introduction to Standard ML LFCS Report Series ECS-LFCS-86-14 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh Nov. 1986 (revised Jan. 1989 by Nick Rothwell and Kevin Mitchell) The following report is available from the LFCS (Dorothy McKie, dam@ecsvax.ed.ac.uk) and is free. It includes an introduction to Standard ML and three lectures on the modules system. Mads Tofte Four Lectures on Standard ML LFCS Report Series ECS-LFCS-89-73 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh March 1989 The following report is available from the LFCS (Dorothy McKie, dam@ecsvax.ed.ac.uk) and is free. It introduces Extended ML, a language for writing (non-executable) specifications of Standard ML programs and for formally developing Standard ML programs from such specifications. See also the WORK IN PROGRESS section, below. Don Sannella Formal program development in Extended ML for the working programmer. LFCS Report Series ECS-LFCS-89-102 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh December 1989 Larry Paulson, Stefan Sokolowski and Bernard Sufrin have books on Standard ML in preparation. Larry's is called "ML for the Working Programmer", and will be published by Cambridge University Press in June 1991. Stefan's is called "Applicative High-Order Programming, or Standard ML in the Battlefield", and is currently available as Tech. Report MIP-8908 from the University of Passau. COURSES The LFCS runs week-long courses on Standard ML. The courses cover both the core language and the modules system. They also give an introduction to specification and refinement in the Extended ML algebraic specification language. Contact lfcs@ed.ac.uk for more information. MAILING LIST The worldwide sml mailing list covers all aspects of Standard ML. Send subscription requests from Europe to sml-europe-request@lfcs.ed.ac.uk. Send subscription requests from elsewhere to sml-list-request@cs.cmu.edu Send contributions to sml-list@cs.cmu.edu. LIBRARY The Edinburgh SML Library provides a consistent set of functions on the built-in types of the language and on vectors and arrays, and a few extras. It includes a "make" system and a consistent set of parsing and unparsing functions. The library consists of a set of signatures with sample portable implementations, two (fairly basic) documentation files, and implementations for Poly/ML, Poplog ML and SML-NJ 0.66 that use some of the non-standard primitives available in those systems. Version 1.16 will be distributed with the next releases of Poly/ML, Poplog ML and Standard ML of New Jersey. It is also available from the LFCS. The library documentation is available as a technical report from the LFCS (Dorothy McKie, dam@ecsvax.ed.ac.uk) and costs 5 pounds or 10 US dollars. The LaTeX source of the report is included with the library. Dave Berry The Edinburgh SML Library LFCS Report Series ECS-LFCS-91-148 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh April 1991 CURRENT IMPLEMENTATIONS There are 6 implementations of Standard ML available now, which are described below. There are another 4 being written, which are described in the next section. They are mostly interactive incremental compilers. They all implement most of the standard faithfully; at present they differ slightly in some obscure corners. I've tried to give some indication of their relative performance on reasonably sized programs, but performance depends on many factors, such as the amount of memory on your machine, the application you're running, etc., so take these remarks with a pinch of salt. Poly/ML. Poly/ML produces native code for Sun3 and SPARC UNIX systems. A VAX version exists, but isn't currently supported. It is being ported to MIPS systems and HP9000/300 systems. Poly/ML is about the speed of a good compiled Common Lisp. For my uses it needs 3-6M of heap space. Poly/ML uses a persistent store and supports arbitrary precision integer arithmetic. It comes with a make system, timing functions and a function that lets you define functor bodies interactively. The next release will include an X11 interface. Non-standard extensions include concurrent processes and an associated message-passing scheme. Poly/ML is distributed by Abstract Hardware Ltd. (bob@ahl.co.uk). It costs 500 pounds (Sun3) or 750 pounds (SPARC) for an academic site licence and 2,000 pounds per machine for industrial users with multiple and site licences by negotiation. Standard ML of New Jersey. Standard ML of New Jersey was developed jointly at AT&T Bell Laboratories and Princeton University. It is an open system (source code is freely available) implemented in Standard ML that emphasizes quality code generation. Version 0.66 (final beta-release) of Standard ML of New Jersey generates native code for Vax, 68020, SPARC, and MIPS (big and little endian) architectures under various versions of the Unix operating system (BSD, Ultrix, SunOS, Mach, HPUX). Ports are underway to the Macintosh OS and the HP9000/700. SML/NJ needs about 1.5 times as much heap space as Poly/ML, though this varies with the application. It produces code that runs slightly faster than Poly/ML, although this varies with the application. SML of NJ comes with ML implementations of LEX and YACC. It provides an interpretive mode with fast compilation, it has profiling and separate compilation facilities, and it can produce stand-alone executable applications. An ML debugger and an X-windows interface are in preparation. Non-standard extensions include typed first-class continuations and Unix signal handling. See also CML in the WORK IN PROGRESS SECTION. SML of NJ is copyrighted by AT&T but the system, including source code, is freely distributable. It is available by anonymous ftp from research.att.com and princeton.edu. Login as "anonymous" with your user name as password. Put ftp in binary mode and copy the (compressed tar) files you need from the directory dist/ml (pub/ml on princeton.edu). You only need the mo.*.tar.Z files for your machines. Alternatively mail dbm@research.att.com. In the UK, it is available from the LFCS (send e-mail to lfcs@ed.ac.uk). Poplog ML. Standard ML is supported as part of the Poplog system, which also provides incremental compilers for Pop-11, Common Lisp and Prolog in a common environment with shared data-structures, so that mixed language programming is possible. The integrated editor and HELP mechanism support online teaching aids. Poplog comes with an X Windows interface. Poplog ML compiles code faster than Poly/ML and SML-NJ, but the code produced runs slightly slower. Process size starts from about 1.5M (including Editor) on Sun3. Poplog is available for VAX+VMS, VAX+Ultrix, VAX+Bsd 4.2/3, Sun-2,3,4, Sun386i, SPARCstation, Solbourne, Sequent Symmetry (with Dynix), HP M680?0+Unix workstations and Apollo+Unix. Versions for MAC-II with A/UX, DECstation 3100 and MIPS will be available shortly. UK educational users should contact the School of Cognitive and Computing Sciences, University of Sussex (alim@uk.ac.sussex.cogs). People in the USA or Canada should contact Computable Functions Inc. (pop@cs.umass.edu. All others should contact Integral Solutions Ltd. (isl@integ.uucp). Commercial prices start around 7,500 pounds. Educational discount 85% . Special prices for UK academics. Edinburgh ML 4.0. Edinburgh ML 4.0 is an implementation of the core language (without the module system). It uses a bytecode interpreter, which is written in C and runs on any machine with 32 bit words, a continuous address space and a correct C compiler. Ports to various 16 bit machines are underway. The bytecode interpreter can be compiled with switches to avoid the buggy parts of the C compilers that we've used it with (as far as I know none of them worked correctly). Ed. ML 4.0 typically uses 1-4M of heap space. It is about a quarter of the speed of Poly/ML. Ed. ML 4.0 is available from the LFCS. People in the UK can get it by e-mail; we also distribute it on Sun/Apollo cartridge or 1/4" tape (tar or VMS format) for a small fee (50 pounds for academic sites and LFCS affiliates, 100 pounds for other commercial organisations). Mail lfcs@ed.ac.uk for more information. ANU ML ANU ML is descended from Cardelli's ML Pose 3. It implements the core language of the standard and an old version of modules. It incrementally compiles to native code on Sun-3, Vax/Ultrix, Pyramid and MacII/AUX. (It is intended to standardize modules and do the port to Sun-4 in the near future.) ANU ML has a program development system with strong support for debugging (tracing, automatic retesting etc.) and has been extended with a built-in type complex. The designers claim that it is as economical with memory as Edinburgh ML but closer in speed to NJ ML. ANU ML is still considered to be in beta release since exceptions have been standardized quite recently. It is available from Malcolm Newey, CS Dept., Australian National University (mcn@anucsd.anu.oz.au) by arrangement; soon to be available by ftp. MicroML MicroML is an interpreter for a subset of SML that runs on IBM PCs. It implements the core language except for records. A 80286 processor or better is recommended. MicroML is available as an alpha-release by anonymous ftp from ftp.cs.umu.se /pub/umlexe01.uue. There are several known bugs in the current version. WORK IN PROGRESS There are 3 implementations of SML currently being developed. There are also some implementations of non-standard extensions available. These are all described here. In addition to these extensions, several people are working on extensions to the theory underlying SML. For example, the LFCS has a research team working on the semantics of a concurrent extension to SML. The Kit Compiler. The LFCS is developing an implementation to serve as a base for experiments in language design. The code reflects the semantics as directly as possible. At present the Kit Compiler can only be run on another implementation of Standard ML. Run like this it is slow and needs at least 16M of heap space to run and 3 times that to compile. The Kit Compiler is not available yet. Ten15 ML. Harlequin limited is developing a Standard ML compiler for the Royal Signals and Radar Establishment, Malvern. The target for the compiler is an algebra specifying an abstract machine. The algebra is called Ten15 and was developed by the RSRE. The SML compiler produces an encoding in Ten15 which can then be translated into machine code for a variety of machines. Harlequin MLWorks. Harlequin limited are currently developing MLWorks to support programming in Standard ML. This product will provide an integrated design and development environment supporting programming in the small and in the large. The environment will also support the specification of ML programs using Extended ML. Harlequin's product is being developed with both the industrial and academic user in mind. MLWorks will be available for use on a large number of hardware platforms. Integrated within MLWorks will be an industrial-strength compiler for Standard ML. Harlequin plans to launch the compiler separately during the first quarter of 1991. Extended ML The LFCS has implemented a parser and type checker for Extended ML, based upon the Kit Compiler. They are currently undergoing some tests. In the near future we hope to have this connected to a theorem prover, either Larry Paulson's Isabelle system or Randy Pollack's LEGO system. Support tools for program development are still in the design stage and are closely linked with the semantics of Standard ML. These tools are not available yet. CML (Concurrent ML) CML is a concurrent extension of SML/NJ, supporting dynamic thread creation, synchronous message passing on synchronous channels, and first-class synchronous operations. First-class synchronous operations allow users to tailor their synchronization abstractions for their application. CML also supports both stream I/O and low-level I/O in an integrated fashion. CML is available, with documentation, via anonymous ftp from ftp.cs.cornell.edu. Connect to cs.cornell.edu (128.84.254.1), use the login id "anonymous" and your name as the password and go to the directory "/pub." The file CML-0.9.tar.Z contains the complete distribution, including the manual, and the file CMLDOC-0.9.ps contains just the manual. Mail cml-bugs@cs.cornell.edu for more information. LCS (a Language for Communicating Systems) LCS implements the core language (without modules), extended with High Order CCS agents. Agents are "first-class" values and are defined as Standard ML values of specific types that may be turned into processes. Agent constructs include all those of CCS, with some extensions. LCS is implemented as a byte-code interpreter, written in C; it runs on virtually all Unix machines and on Apple Macintoshes (Finder ok). Core images are portable across machines. Two interactive user interfaces are provided: an executive and a simulator. In addition to SML, the executive allows users to start and manage processes, either foreground or background (the top-level runs itself as an LCS process). The simulator implements a set of commands for interactively expanding LCS agents, under full control of the user. LCS runs between 6 times slower than SML-NJ on toy examples and 2 times slower on large examples (including garbage collection time, measured on a locally used 7000 lines ML application). Message passing between processes is about 5 times slower than functional parameter passing. Contact Bernard Berthomieu (bernard@laas.laas.fr) for more information. OBSOLETE IMPLEMENTATIONS Edinburgh ML 3.5. Edinburgh ML 3.5 is a predecessor of Edinburgh ML 4.0. It uses the old style exceptions, and includes an obsolete version of the modules system. It is mentioned here because it is available on the Macintosh. Edinburgh ML 3.5 is available in the UK by e-mail from the LFCS. We will also distribute it on a tape, as for Edinburgh ML 4.0. It is also available from Meta Software (Peter Hendersen, pbh@sbcs.sunysb.edu). Rutherford ML. Rutherford ML is an implementation of the core language that runs on Franz Lisp. It is no longer maintained, and is only distributed with the Cambridge LCF system (which it supports). Rutherford also supply an SML-YACC parser generator, which runs on Edinburgh ML and Poly/ML, and will soon run on New Jersey ML. Both SML-YACC and Cambridge LCF are available from Brian Matthews (bmm@uk.ac.rl.inf). -- Dave Berry, LFCS, Edinburgh Uni. db%lfcs.ed.ac.uk@nsfnet-relay.ac.uk "So they gave him a general anaesthetic and cleaned him with Swarfega."