Here is a bibliography of books, papers and articles related to Modula-3. A more concise bibliography organized by topic is also available.
This report describes a theoretical treatment of the semantics of objects.
This article describes the advantages of using a safe programming language like Modula-3 in the instruction of computer science. It also lists some of the schools that have used Modula-3 as an instructional language, and summarizes their experiences.
This report describes an algorithm used as the basis for SRC Modula-3 garbage collector.
Presents a formal specification of the Threads synchronization primitives used in the Modula-2+ programming language. These primitives were quite similar to the ones defined in Modula-3. A revised version of this paper also appears as Chapter 5 of Systems Programming with Modula-3.
A highly-recommended guide to effectively writing multi-threaded programs. It uses the Modula-2+ threads library for the examples, but these are quite similar to the ones used in Modula-3. A revised version also appears as Chapter 4 of Systems Programming with Modula-3.
This report describes a fault-tolerant and efficient garbage collection algorithm for distributed systems. It is the algorithm used to garbage collect Network Objects.
This report describes the design and implementation of a network objects system, which allows you to write programs that communicate over a network, while hiding the messy details of network programming. Network objects provide functionality similar to remote procedure call (RPC), but they are more general and easier to use. The system is implemented in Modula-3.
This book is an introductory programming text that uses Modula-3 for its examples. The authors say, "The main concern of the book is to give a clean and comprehensive introduction to programming for beginners of a computer science study. We start with more traditional programming concepts and move toward advanced topics such as object-oriented programming, parallel & concurrent programming, exception handling, and persistent data techniques. The book also presents a large number of complete examples written in Modula-3."
This article describes the teaching and research efforts centered around Modula-3 at the University of Klagenfurt in Austria.
This report describes Zeus, an algorithm animation system written in Modula-3.
This report describes the algorithm animations produced during SRC's first algorithm animation festival. The algorithm animation systems were developed using the Zeus algorithm animation system.
This report describes the algorithm animations produced during SRC's second algorithm animation festival. The algorithm animation systems were developed using the Zeus algorithm animation system.
This report is the working definition of the VBTkit toolkit. VBTkit is a collection of widgets for building graphical user interfaces in Modula-3. See the FormsVBT Reference Manual below, which describes a system for easily composing these widgets.
It's also available in the vbtkit archive of the SRC Modula-3 distribution.
This report is the working definition of the FormsVBT toolkit. FormsVBT is a system for constructing graphical user interfaces (GUI's) in Modula-3.
It's available in the formsvbt archive of the SRC Modula-3 distribution. A draft version is available via anonymous FTP from gatekeeper.research.compaq.com in pub/DEC/Modula-3/contrib/formsvbt.25Mar93.ps.Z and pub/DEC/Modula-3/contrib/formsvbt.AppC.26Mar93.ps.Z.
This report shows how to use objects in a real program. Also defines the de facto standard input/output functions. These interfaces give an especially good example of partially opaque types. A revised version of this report also appears as Chapter 6 of Systems Programming with Modula-3.
The report contains the original definition of the language, superseded by Research Report 52.
This report is the definition of the Modula-3 language. The complete language definition, Chapter 2 of Systems Programming with Modula-3, is also available on-line.
This article defines the Modula-3 programming language; it is identical to Chapters 2 and 3 of SPwM3. A more up-to-date on-line version is also available.
A draft of a book describing "the latest object-oriented techniques for developing large interactive distributed applications". The focus is on the Modula-3 libraries and Network Objects, but the first two chapters give an introduction to object-oriented programming in general, and the object methodologies of C++ and Obliq in particular.
This article motivates and describes an optimizer for Modula-3 programs based on whole-program analysis. An optimizer that looks at an entire program can do better than one that uses only the information imported when compiling a single module. Preliminary results are promising: on benchmark programs, up to 50% of method invocations can be converted to direct calls. The optimizer is itself written in Modula-3.
This paper shows how the overhead introduced by Modula-3's opaque types can be reduced at link time. The optimizations described in the paper are shown to be effective: they reduce the total number of instructions by up to 14% and convert as many as 79% of indirect calls to direct calls.
This thesis describes mld, a retargetable, optimizing linker, for the MIPS, SPARC, and Intel 486 architectures. The linker optimizes away some of the costs of late binding. In particular, mld's optimizations permit efficient implementation of Modula-3's module-encapsulation and data-abstraction features. The thesis presents the results of applying mld's simple optimization techniques to several Modula-3 programs and reports their execution times on the MIPS and Intel 486 architectures.
This article summarizes the author's work on mld, a link-time optimizer for Modula-3. For even more information, see her PLDI paper or her Ph.D. thesis.
The SPIN group at the University of Washington has been using Modula-3 since 1995 as both the kernel and extension language for the SPIN operating system. In this article, they describe the set of additions they have made to extend Modula-3's support for low-level systems programming.
This article describes how Modula-3's partial revelations promote encapsulation and code reuse. The article is one of five on "object-oriented programming" contained in the same issue (the other four languages are C++, Ada 95, S, and Cobol '97).
This article describes the Modula-3 treatment of floating-point values.
This page describes the authors' experience installing Modula-3 on a PC and using the language to implement a concurrent breadth-first search algorithm. The authors were trying to install M3forDOS, an implementation of Modula-3 that runs on DOS PC's. They found this installation to be quite difficult. They eventually ended up using a version of SRC Modula-3 that had already been installed on a Unix box at their site.
This article is a survey of the Modula-3 language. It gives a brief history of the language and describes the language's major features, including modules, exceptions, objects, threads and other support for concurrent programming, safety, and garbage collection. It also discusses the basis for some of the more contentious language design decisions.
This article is a survey of the Modula-3 language.
A complete Modula-3 textbook covering the full language, with examples and exercises. Includes a style manual and a user's guide for SRC Modula-3.
The first edition of the book contains many typos. A list of errata is available on-line for anonymous FTP (in TeX, compressed PostScript, or DVI format) from gatekeeper.research.compaq.com in the directory pub/DEC/Modula-3/errata/.
Available from i41s10.ira.uka.de [220.127.116.11] by anonymous ftp in directory pub/m3s as jspp93.ps or jspp93.ps.gz.
Available from Universitatsverlag Ulm GmbH or from i41s10.ira.uka.de [18.104.22.168] by anonymous ftp in directory pub/m3s as jmlc94.ps or jmlc94.ps.gz.
The paper evaluates Oberon, Modula-3, Sather, and Self in the context of object-oriented programming. While each of these programming languages provide support for classes with inheritance, dynamic dispatch, code reuse, and information hiding, they do so in very different ways and with varying levels of efficiency and simplicity. A single application was coded in each language and the experience gained forms the foundation on which the subjective critique is based. By comparing the actual run-times of the various implementations it is also possible to present an objective analysis of the efficiency of the languages. Furthermore, by coding the application using both explicit dynamic dispatch and static method binding, it is possible to evaluate the cost of dynamic dispatch in each language. The application was also coded in C++, thereby providing a well-known baseline against which the execution times can be compared.
This report describes Juno-2, a powerful constraint-based drawing editor implemented in Modula-3. For more information, see the Juno-2 Home Page.
Juno-2 is a constraint-based drawing program. This article describes how Modula-3's FormsVBT, VBTkit, and Trestle libraries were used to implement the Juno-2 user interface.
This article describes the design and implementation of
DblBufferVBT.T, a software double-buffer that we used in
constraint-based drawing editor to produce smooth graphics and animations.
This article describes the design of three object types used in the Juno-2 constraint solver. It illustrates the use of objects, subclassing, method overriding, and partial revelation in Modula-3. In particular, it describes the implementation of the unification closure algorithm used to solve pair constraints in the constraint solver.
The sources of an example use of the SmallDB interface. In particular, the example defines a generic interface called "StableTbl". A "StableTbl.T" is like a "Table.Default", except that all updates to the table are written to stable storage for reliability. To write the table's data-structures to disk, the library uses SRC Modula-3's Pickle interface. It also includes an example of a quake template that defines procedures for instantiating generic data types. A gzipped tar archive of the sources and web page is also available.
The sources of an example demonstrating the use of the SortedTable generic interface. It includes a test program that instantiates the generic SortedTable with a custom domain type named IntIntvl and REAL for the range type. An IntIntvl.T is simply an integer interval. A gzipped tar archive of the sources and web page is also available.
This draft paper describes three Modula-3 implementations of the generic
SortedTable interface, and compares their time and space
performance. The three algorithms compared are the default
SortedTable.Default implementation bundled with
the Modula-3 libraries, a red-black tree implementation, and a
skip list implementation.
The complete sources for the two non-standard implementations
are available in a
This draft paper describes a Modula-3 interface for the User Datagram Protocol (UDP). The Modula-3 sources of an implementation that works on all POSIX platforms is also available as a gzipped tar archive. Thanks to Jonathan Gutherie for writing the first implementation on which this one was based.
This report is a description of the SRC standard Modula-3 library interfaces. It's an essential reference for every Modula-3 programmer!
Describes the extensions made by the SPIN group at the University of Washington to the Modula-3 language for use in their SPIN extensible operating system.
Aachen University of Technology, in Aachen, Germany has been using Modula-3 successfully for a number of academic and research projects since 1993. Peter Klein, a member of the CS Department III, reports on some of their experiences.
This report is the working definition of the Trestle toolkit for doing graphics in Modula-3.
This report is a tutorial introduction to the Trestle toolkit.
This report describes Obliq-3D, an interpreted language based on the Anim3D library for building 3D animations quickly and easily.
A happy user promotes SRC Modula-3. The article begins:
Despite its length and buzzword density, the subtitle above is one the shortest phrases that characterize the virtues of SRC Modula-3. The language designers' stated goal of "consolidation, not innovation" is a modest understatement for their wise, elegant, and inventive combination of features that are greatly needed by the modern programmer.
The sources of a simple client and server that use network objects. A gzipped tar archive of the sources and web page is also available.
This article describes Reactor, a Modula-3 integrated development environment (IDE) that is now freely available.
JVM, Critical Mass's implementation of the Java Virtual Machine, is written entirely in Modula-3. This article describe the JVM was used to build an industrial, Java-extensible serial port controller in Modula-3.
This book is the definitive language reference. It includes the language reference manual and papers on the I/O library, threads, and the Trestle window system. It is also known as "SPwM3".
Here is its table of contents:
These online bookstores claim to carry SPwM3.
This article describes the rationale for the way object types are
initialized in Modula-3. Modula-3 doesn't have type
constructors, but you can specify default values for object
fields in the type definition. The article also describes the
init method convention.
This brief article argues why checked run-time errors, such as indexing off the end of array, are not mapped to exceptions in Modula-3. How checked run-time errors are handled is implementation-dependent.
Before Modula-3 there was Modula-2+. This report describes how the authors extended Wirth's Modula-2 programming language to include support for many language features that have become commonplace in modern programming languages, including support for threads, synchronization primitives, exceptions, safe memory management, and garbage collection. All of these features lived on in Modula-3.
A journal version of SRC Research Report 3.
Sedgewick's classic text on basic algorithms and data structures. The examples in this edition are written in Modula-3.
An on-line reference and tutorial, available in three formats: HTML, Texinfo source, and GNU Info files. All three formats are available as a gzipped tar file as well.
Describes the experiences of the SPIN group at the University of Washington using Modula-3 to build a high performance extensible operating system. Debunks some of the myths surrounding Modula-3 by arguing that the SRC reference implementation introduces inefficiencies that are not imposed by the Modula-3 language itself.
This brief article announces Photon, a commercially supported development environment based on SRC Modula-3. The first official release is scheduled for the first quarter of 1996. The first target platform is Linux PC's. Photon is a product of Critical Mass, Inc..
An on-line introduction to the Trestle window system. This tutorial was written to conform with SRC Modula-3 version 2.11. Some of the interfaces called in this tutorial are obsolete. A gzip'ed tar archive of the entire tutorial is available.
A good summary article on the Modula-3 programming language, libraries, and system.
An overview of Modula-3 republished April 2014 by Paul Vixie in his blog
You can order SRC Research Reports and videotapes on-line through the World-Wide Web. All reports and videotapes are free.
You can also order reports and videos by contacting:
SRC Report Distribution
Digital Equipment Corporation
130 Lytton Avenue
Palo Alto, CA 94301-1044