x

Software Preservation Group of the Computer History Museum

Modula-2+ History Collection

Paul McJones, editor
paul@mcjones.org
https://mcjones.org/dustydecks/

Last modified 30 November 2025

Contents

Introduction

The goal of this project is to preserve and present source materials (including specifications, source code, manuals, and papers discussing design and implementation) for the Modula-2+ language designed at the Systems Research Center of Digital Equipment Corporation.

In 1984 Robert W. Taylor left his position at the Xerox Palo Alto Research Center, and founded the Systems Research Center (SRC) at Digital Equipment Corporation (DEC), with a charter to develop "software and hardware to provide a powerful base for work in programming systems, distributed systems and personal workstations." Many of the researchers who followed Taylor to SRC had worked on the Cedar system, which was written in the Cedar variant of the Mesa programming language and which ran on the Dorado personal workstation. (See Software Preservation > Mesa.)

At SRC, they needed to start over with a new programming environment. A VAX 780 running DEC's Ultrix operating system was acquired. Chuck Thacker led the design of a shared-memory multiprocessor using MicroVAX II CPU chips. [Thacker1987a, 1987b, 1988] The language Modula-2, designed by Niklaus Wirth, was identified as having many of the features they desired: Rovner1985, 1986] (Modula-2, in turn had been influenced by Wirth's experience with Mesa during a 1976n sabbatical at PARC. [Wirth1980])

However based on experience with Mesa and Cedar Mesa at PARC, it was felt necessary to extend Modula-2 in several areas:

The language was designed by Paul Rovner with large contributions by Andrew Birrell, Butler Lampson, and Roy Levin and suggestions by others at SRC.

[Rovner1985]
Paul Rovner, Roy Levin, and John Wick. On extending Modula-2 for building large, integrated systems. Report 3, Systems Research Center, Digital Equipment Corporation. 11 January 1985. PDF
[Rovner1986]
P. Rovner. Extending Modula-2 to Build Large, Integrated Systems. IEEE Software, Volume 3, Number 6, November 1986, pages 46–57. IEEE Xplore / PDF
[Thacker1987a]
Charles P. Thacker and Lawrence C. Stewart. Firefly: a multiprocessor workstation. In Proceedings of the second international conference on Architectual support for programming languages and operating systems (ASPLOS II). Association for Computing Machinery, New York, October 1987, pages 164–172. ACM Digital Library

"It may not be fast, but it has a lot of torque."

[Thacker1987b]
Charles P. Thacker, Lawrence Stewart, and Edwin H. Satterthwaite, Jr. Firefly: a multiprocessor workstation. Report 23, Systems Research Center Digital Equipment Corporation. 30 December 1987. PDF
[Thacker1988]
Charles P. Thacker, Lawrence Stewart, and Edwin H. Satterthwaite, Jr. Firefly: a multiprocessor workstation. IEEE Transactions on Computers, Volume 37, Issue 8, August 1988, pages 909–920. IEEE Xplore / PDF
[Wirth1980]
Niklaus Wirth. Modula-2. Technical Report, Institut für Informatik, Eidgenössische Technische Hochschule, Zürich, March 1980. PDF at www.modula2.org

Implementations

Mike Powell at the DEC Western Research Laboratory wrote a Modula-2 compiler for the VAX and later the MIPS R3000. [Powell1984], [McCormack1992]

Paul Rovner, with help from others at SRC, adapted Powell's compiler to handle the full Modula-2+ language. [vanLeunen1986], [Rovner1985, 1986], [ DeTreville1990a, b].

The Modula-2+ programming environment, with the compiler, a set of libraries, and a set of applications, was called Topaz. There were two versions of Topaz: one ran under the Ultrix operating system on DEC VAX computers, and the other ran on the Taos operating system on SRC's own Firefly multiprocessor workstations.

A second clean-slate Modula-2+ compiler was designed by John Ellis as part of the Vulcan project to provide fast turnaround for large systems. [Ellis1987], [Ayers1987], [Ellis1990a,b,c], [DeTreville1991]

[McCormack1992]
Joel McCormack. New versions of Modula-2 compiler for MIPS, VAX available. Newsgroup post: comp.compilers, etc. 2 July 1992. Online at compilers.iecc.com
[Powell1984]
Michael L. Powell. A portable optimizing compiler for Modula-2. In Proceedings of the 1984 SIGPLAN symposium on Compiler construction (SIGPLAN '84). Association for Computing Machinery, New York, pages 310–319. ACM Digital Library
[vanLeunen1986]
Mary-Claire van Leunen. The Modula-2+ User's Manual. Systems Research Center, Digital Equipment Corporation, DRAFT, 18 April 1986. PDF

Threads

Support for true concurrency in a programming language was not common in 1985. Cedar Mesa had provided preemptively-scheduled threads based on a design originally incorporated in Mesa. [Lampson1980] The Modula-2+ Threads interface had similar semantics, but supported true concurrency on the Firefly shared-memory multiprocessor workstation. [Birrell1987, 1989]

[Birrell1987]
A. D. Birrell, J. V. Guttag, J. J. Horning, and R. Levin. Synchronization Primitives for a Multiprocessor: A Formal Specification. Report 20, Systems Research Center, Digital Equipment Corporation, 20 August 1987. PDF
[Birrell1989]
Andrew D. Birrell. An Introduction to Programming with Threads. Report 35, Systems Research Center, Digital Equipment Corporation, 6 January 1989. PDF
[Lampson1980]
Butler W. Lampson and David D. Redell. Experiences with Processes and Monitors in Mesa. CACM Volume 23, Number 2, February 1980, pages 105–117. ACM Digital Library

Garbage collection

Although both trace-and-sweep and reference-counting garbage collection algorithms were used list-processing systems by 1960, [McCarthy1960], [Collins1960] designing efficient algorithms for a language with the combined features Modula-2+ was still a challenge in 1985. The initial Modula-2+ garbage collector used reference-counting and was based on the algorithm used in Cedar Mesa at Xerox PARC. John DeTreville conducted experiments with a series of algorithms, finally settling on a combination of reference-counting with an occasional mark-and-sweep to handle cyclic structures. [DeTreville1990b]

[Collins1960]
George E. Collins. 1960. A method for overlapping and erasure of lists. Commun. ACM, Volume 3, Number 12, December 1960, pages 655–657. ACM Digital Library
[DeTreville1990a]
John DeTreville. Heap Usage in the Topaz Environment. Report 63, Systems Research Center, Digital Equipment Corporation. August 1990. PDF
[DeTreville1990b]
John DeTreville. Experience with Concurrent Garbage Collectors for Modula-2+. Report 64, Systems Research Center, Digital Equipment Corporation. 22 November 1990. PDF
[McCarthy1960]
John McCarthy. Recursive functions of symbolic expressions and their computation by machine, Part I. Commun. ACM Volume 3, Number 4, April 1960, pages 184–195. ACM Digital Library

Pickles

"A pickle is an external copy of a heap structure. Heap structures can be pickled into a bytestream and the bytestream can be unpickled back in to a copy of the original structure Pickles are fast to write and very fast to read. Pickles can therefore serve as a standard structure for longterm data storage. For example window system fonts are stored as pickles. A font is represented as a REF to the font information and the pickles are stored in files. On startup programs may read these pickles to define fonts." [DeTreville1990a]

- - -

"Our implementation makes use of a mechanism called 'pickles', which will convert between any strongly typed data structure and a representation of that structure suitable for storing in permanent disk files. The operation Pickle.Write takes a pointer to a strongly typed data structure and delivers buffers of bits for writing to the disk. Conversely Pickle.Read reads buffers of bits from the disk and delivers a copy of the original data structure.* This conversion involves identifying the occurrences of addresses in the structure, and arranging that when the structure is read back from disk the addresses are replaced with addresses valid in the current execution environment. The pickle mechanism is entirely automatic: it is driven by the run-time typing structures that are present for our garbage collection mechanism.

* Pickling is quite similar to the concept of marshalling in remote procedure calls. But in fact our pickling implementation works only by interpreting at run-time the structure of dynamically typed values, while our RPC implementation works only by generating code for the marshalling of statically typed values. Each facility would benefit from adding the mechanisms of the other, but that has not yet been done." [Birrell1987b]

[Birrell1987b]
A. Birrell, M. Jones, and E. Wobber. A simple and efficient implementation of a small database. In Proceedings of the Eleventh ACM Symposium on Operating Systems Principles (SOSP '87). Association for Computing Machinery, New York, 1987, pages 149–154. ACM Digital Library / SRC Report 24: PDF

Applications written in Modula-2+

Loupe debugger

The Loupe debugger was written for the original implementation of Modula-2+; it was later rewritten for the Vulcan version. [DeTreville1991]

Taos operating system

Taos (named forTopAz Operating System) ran on Firefly multiprocessor workstations. It was microkernel-based. The microkernel was called the Nub, and provided address spaces, threads, and device drivers. The rest of the operating system—Unix emulation and file system—ran in a user address space. Unix emulation allowed programs compiled for DEC Ultrix (essentially BSD 4.2) to run normally. In addition, it supported multi-threaded Topaz programs, which used RPC to cross address space and machine boundaries. These Topaz programs obtained their system services via the Modula-2+ interface OS, which was implemented as a thin veneer over a set of RPC calls on the main operating system address space.

See [McJones1987, 1989a] for the OS interface. See [McJones1989b] for the principles used in designing this interface.

[McJones1987]
Paul R. McJones and Garret F. Swart. Evolving the UNIX System Interface to Support Multithread Programs. Report 21, Systems Research Center, Digital Equipment Corporation, 28 September 1987. PDF
[McJones1989a]
Paul R. McJones and Garret F. Swart. The Topaz Operating Svstem Programmer's Manual. Systems Research Center, Digital Equipment Corporation, 17 July 1989. PDF

An older version appeared as part II of [McJones1987].

[McJones1989b]
Paul McJones and Garret Swart. Evolving the UNIX system interface to support multithreaded programs. Proceedings of the Winter 1989 USENIX Conference, December 1989, pages 393-404. PDF

Slightly edited version of part I of [McJones1987].

[Wobber1994]
Edward Wobber, Martín Abadi, Michael Burrows, and Butler Lampson. Authentication in the Taos operating system.
  • In Proceedings of the fourteenth ACM symposium on Operating systems principles (SOSP '93). Association for Computing Machinery, New York, 5-8 December 1993, pages 256–269. ACM Digital Library
  • Report 117, Systems Research Center, Digital Equipment Corporation, 10 December 1993. PDF
  • ACM Trans. Comput. Syst. Volume 12, Number 1, February 1994, pages 3–32. ACM Digital Library

Source code

Echo distributed file system

"Echo is an ambitious distributed file system. It was designed around a truly global name space. It uses a coherent caching algorithm. It is fault tolerant. And it is real—it was the primary file system for a large group of researchers. Its novel aspects include an extensible 'junction' mechanism for global naming; extensive write-behind with ordering semantics that allow applications to maintain invariants without resorting to synchronous writes; and fault tolerance mechanisms that are highly configurable and that tolerate network partitions. It was designed with the intention that its performance could be as good as a local file system, while supporting large numbers of clients per server. Its reliability was designed to be higher than other distributed file systems, and higher than centralized systems. It was designed to work well in arbitrarily large networks." [Birrell1993]

[Birrell1993]
Andrew D. Birrell, Andy Hisgen, Chuck Jerian, Timothy Mann, and Garret Swart. The Echo Distributed File System. Report 111, Systems Research Center, Digital Equipment Corporation, 10 September 1993. PDF

Original Trestle/VBT window system

For the later Modula-3 version, see [Manasse1991] and [Manasse1992] in Software Preservation > Modula-3.

Dialog Editor

The dialog editor was a direct-manipulation user interface editor. Client programs interacted with the user interface via abstract protocols, e.g., an event might be triggered by a button push or menu command. The system came with a large set of interactors, but was open-ended, allowing new interactors to be added.

[Cardelli1987]
Luca Cardelli. Building User Interfaces by Direct Manipulation. Report 22, Systems Research Center, Digital Equipment Corporation, 1987; revised 1993. PDF / Accompanying video: WMV at lucacardelli.com
[Cardelli1988]
Luca Cardelli. Building user interfaces by direct manipulation. In Proceedings of the 1st Annual ACM SIGGRAPH Symposium on User Interface Software (UIST '88). Association for Computing Machinery, New York, 1988, pages 152–166. ACM Digital Library

Tinylisp

"Tinylisp is a language intended for 'programming-in-the-small' in SRC's Modula-2+ environment. It is a lexically scoped Lisp implemented as a package that can be bound into any Modula-2+ application, providing that application with instant programmability. The Ivy text editor uses Tinylisp to implement its predefined commands and to allow users to write their own commands; future applications may include a shell based on 'vbtkit' dialogs.

The Tinylisp language itself is a small, modern Lisp that provides a fairly rich set of traditional control and data structures (including threads), with two-level naming based on modules. All the basic Modula-2+ packages are directly accessible from Tinylisp, including Text, List, Table, Thread, FileStream, Rd, Wr, OS, Time, Math, and RegExpr.

Tinylisp can directly manipulate integers, characters, booleans, longreals, and any opaque-ref types provided by the particular application, and Tinylisp can call procedures that traffic in these types. Using compile_tli a stub generator similar to RPC's flume, application implementers define which of the application's procedures and datatypes will be accessible from Tinylisp. It is the responsibility of the application implementer to define Modula-2+ interfaces that are suitable for programming-in-the-small."
[Ellis1989] in Software Preservation > LISP

Siphon and packagetool

The Siphon facilitates joint software development between groups working at distant sites connected by low bandwidth communication lines. It gives users the image of a single repository of individually manageable units, typically software or documentation components. Users can lock and modify each unit, the result being propagated automatically to all sites. The repository is replicated at each site, and possibly on multiple file servers for greater availability and reliability. It used RPC for communication. See Siphon in Software Preservation > Modula-3 for a later version.

[Prusker1990a]
Francis J. Prusker and Edward P. Wobber. The Siphon: Managing Distant Replicated Repositories. In Proceedings of the IEEE Workshop on the Management of Replicated Data, November 1990, pages 44–47.
[Prusker1990b]
Francis J. Prusker and Edward P. Wobber. The Siphon: Managing Distant Replicated Repositories. Report 7, Paris Research Laboratory, Digital Equipment Corporation, May 1991. PDF

Ivy text editor

Ivy was an extensible text editor written in Modula-2+ that allowed extensions to be written in Tinylisp. In addition to text windows, it supported terminal windows with unbounded persistent typescripts.

Vesta software configuration management system

Vesta was a software configuration and release management system. It provided a novel
repository and system builder that emphasized complete yet manageable descriptions of software components.

[Brown1992]
Mark R. Brown, Lucille Glassman, Christine Hanna, and Roy Levin. Vesta User Manual. Systems Research Center, Digital Equipment Corporation, 22 January 1992. PDF
[Brown1993]
Mark R. Brown and John R. Ellis. Bridges: Tools to Extend the Vesta Configuration Management System. Report 108, Systems Research Center, Digital Equipment Corporation, 14 June 1993. PDF
[Chiu1993]
Sheng Yang Chiu and Roy Levin. The Vesta Repository: A File System Extension for Software Development. Report 106, Systems Research Center, Digital Equipment Corporation, 14 June 1993. PDF
[Hanna1993]
Christine B. Hanna and Roy Levin. The Vesta Language for Configuration Management. Report 107, Systems Research Center, Digital Equipment Corporation. 14 June 1993. PDF
[Levin1993]
Roy Levin and Paul R. McJones. The Vesta Approach to Precise Conguration of Large Software Systems. Report 105, Systems Research Center, Digital Equipment Corporation. 14 June 1993. PDF

Vulcan fast turnaround compiler

The goals of this project were: [Ellis1987]

Vulcan was structured as a Vesta bridge. [Ellis1990b], [Brown1993]

[Ayers1987]
Bob Ayers, John DeTreville, Jim Horning, Bill Kalsow, and Ed Sattertwaite. NPE: A New Modula-2+ Programming Environment. Systems Research Center, Digital Equipment Corporation, 22 October 1987. PDF
[DeTreville1991]
John DeTreville and Michael Sclafanai. Vulcan Loupe: A Modula-2+ε Debugger. Systems Research Center, Digital Equipment Corporation, 29 April 1991. PDF
[Ellis1987]
John R. Ellis. A Proposal for a Modula-2+ Programming Environment. Systems Research Center, Digital Equipment Corporation, 1 June 1987. PDF
[Ellis1990a]
John R. Ellis. Modula-2+Epsilon Language Specification. Systems Research Center, Digital Equipment Corporation, 26 June 1990. PDF
[Ellis1990b]
John Ellis, Bill Kalsow, Eric Roberts, and Michael Sclafani. The Vulcan Bridge. Systems Research Center, Digital Equipment Corporation, 30 August 1990. PDF
[Ellis1990c]
John Ellis, Bill Kalsow, Eric Roberts, and Michael Sclafani. The Vulcan Runtime Architecture. Systems Research Center, Digital Equipment Corporation, 27 September 1990. PDF

Zeus algorithm animation system

The original version of Zeus was written in Modula-2+. For the similar Modula-3 version, see [Brown1992a, Brown1992b] in Software Preservation > Modula-3.

Acknowledgments

*** TO DO: Ask people for additional recollections, e.g., Marc H. Brown, Mark R. Brown, Mike Burrows, Luca Cardelli, John DeTreville, John Ellis, Roy Levin, Bill Kalsow, Mark Manasse, Paul Rovner, Mike Schroeder, Ted Wobber ...

AltStyle によって変換されたページ (->オリジナル) /