Reflections on Standard ML
David B. MacQueen
AT&T Bell Laboratories
Murray Hill NJ 07974
Abstract. Standard ML is one of a number of new programming languages developed in the 1980s that are seen as suitable vehicles for serious systems and applications programming. It offers an excellent ratio of expressiveness to language complexity, and provides competitive efficiency. Because of its type and module system, Standard ML manages to combine safety, security, and robustness with much of the flexibility of dynamically typed languages like Lisp. It is also has the most well-developed scientific foundation of any major language. Here I review the strengths and weaknesses of Standard ML and describe some of what we have learned through the design, implementation, and use of the language.
The goal of programming language design is to maximize expressiveness while minimizing conceptual complexity, within the constraint that the language must have an efficient implementation. If a language is to be suitable for large-scale, serious programming (i.e., implementing software that will have users and will therefore have to be robust and maintainable), then it must provide security and facilities for organizing large programs. These are some of the desiderata that guided the design of Standard ML.
This paper presents my personal views about language design and the lessons we have learned from the design and implementation of Standard ML. As the field of programming language design matures, it is essential that a more scientific approach should come into play. The history of ML provides an example of how theoretical insights and practical programming requirements can be successfully synthesized.
The first section summarizes some of the strengths of Standard ML. We then proceed to some remarks on the process of language design in general and on the design of Standard ML in particular. Next comes a review of some particular lessons learned from the experience of implementing and using Standard ML. Section 5 illustrates the continuing language research activity associated with ML by describing a number of experimental language extensions. These efforts can be seen as exploring options for the next generation of ML-like languages. Finally I discuss the relation between ML and object-oriented programming and finish with some projections about the future development of Standard ML and its successors.
I will not review the history of ML here, since that topic is well covered in Appendix E of the Definition of Standard ML () and in Robin Milner's Turing award interview (). I will also assume some familiarity with ML and refer the reader to John Ophel's paper in this volume () for an overview of the language, and to Larry Paulson's book () for a more extensive introduction. I will often