S

Software Preservation Group of the Computer History Museum

Mesa History Collection
***** DRAFT *****

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

Last modified 29 January 2026

The goal of this project is to preserve the history of the Mesa family of system programming languages designed at Xerox PARC in the 1970s—MPL, Mesa, and Cedar—via primary and secondary source materials including specifications, source code, manuals, memos, and papers.

***** Items flagged like this are reminders to the author of things needing follow-up

***** PDFs of papers from the Charles Irby Papers (Stanford Special Collections M0671) await clearance by authors

Contents

Prehistory

In order to understand the environment in which Mesa was designed it is interesting to trace forward from the beginning of computer research in the San Francisco Bay Area. One of the earliest projects in the area was the CALDIC digital computer, led by Paul Morton (1906–1995) at the University of California, Berkeley. The project began in 1948 and the machine was running by the early 1950s. One of the participants, was Douglas Engelbart (1925–2013).

In 1954, Harry Huskey (1916–2017) joined Morton on the Berkeley faculty. Huskey had worked on ENIAC with John von Neumann (1903-1957) and on the Pilot Ace with Alan Turing (1912-1954), and then designed the Standards Western Automatic Computer (SWAC) at the National Bureau of Standards in Los Angeles. Around the time he joined the Berkeley faculty, he was also designing the G-15 for Bendix. In the late 1950s Huskey led the development of NELIAC, an ALGOL 58 dialect whose compiler was written in NELIAC. In the early 1960s, his student Niklaus Wirth used NELIAC to implement the first version of his language EULER, a generalization of ALGOL 60. After getting his PhD at Berkeley, Wirth joined the Stanford University Computer Science Department and worked on a series of programming languages: a revised EULER, the machine-oriented PL360, and finally ALGOL W (which was implemented in PL360). Several graduate students worked on ALGOL W; one of them was Edwin Satterthwaite (1943–). At about this time, Wirth returned home to Switzerland, taking a position at the University of Zürich for one year, and then moving to ETH Zürich for the rest of his career. At ETH, Wirth continued to design programming languages: Pascal [Wirth1971, 1973], Modula and Modula-2, and finally Oberon.

Meanwhile, in 1962 on the east coast, J. C. R. Licklider (1915–1990) was appointed director of the ARPA Information Processing Techniques Office, and began issuing grants for time sharing-system research, including a project for the AN/FSQ-32 computer at System Development Corporation in Santa Monica, California. He also issued a small grant to Huskey and David Evans (1924–1998), who Huskey had recruited to Berkeley from Bendix, where he'd been the project manager for the G-15 and G-20 projects. This first project was just to set up remote teletype access to the timesharing system at SDC, but it was followed by Project Genie, a timesharing system based on a modified SDS 930 (later named the SDS 940—see photo). Much of the software for Project Genie was written by Butler Lampson (1943–), another of Huskey's PhD students, and L. Peter Deutsch (1946–), a precocious undergraduate who'd already written an interactive LISP system and the first TRAC interpreter, both for the PDP-1. Lampson and Deutsch collaborated on QSPL, a systems programming language for the SDS 940 [Deutsch1967].

In parallel with these activities at Berkeley, Doug Engelbart, who'd joined SRI (originally the Stanford Research Institute and now SRI International) in 1957, had been doing early work on NLS (oNLine System). He struggled for funding, but found a sponsor in Robert Taylor at NASA. Taylor's mentor was Licklider, and Engelbart's vision of augmenting human capabilities with computers fit Licklider's vision as Taylor interpreted it. Taylor moved from NASA to ARPA and was able to continue funding Engelbart. Engelbart slowly built a team of dedicated engineers, who were joined for the summer of 1965 by interns Lampson and Deutsch.

In 1967 the Project Genie timesharing system was working smoothly and Engelbart acquired an SDS 940. Work on NLS proceeded, and in December 1968 Engelbart and his team, which included William H. Paxton III (1946?–2025) by this point, gave a demonstration at the Fall Joint Computer Conference. Engelbart sat in front of the audience with his display, keyboard, mouse, and 5-finger keyset; his screen was visible to the audience via a projector and large screen. Engelbart collaborated with colleagues at SRI in Menlo Park editing documents and holding a video conference. This "Mother of All Demos" deeply impressed the audience of computer researchers. Charles H. Irby (1945–2024) was inspired by the demo to join the project.

The Project Genie designers, pleased with their success, wanted to build a larger production system. ARPA would only fund early research, so they started the Berkeley Computer Corporation, with venture financing. Joined by recent Berkeley physics graduate Charles P. Thacker (1943–2017), they built a first prototype, the BCC 500, but ran out of funding as the system was being finished. Taylor convinced ARPA to acquire the prototype for the University of Hawaii, where it ran through the 1970s. One feature of the BCC 500 was a systems programming language called SPL. Inspired by QSPL, it was a more powerful and polished language [Lampson1969].

Now we temporarily leave the Bay Area. In 1968, William Wulf (1939–2023 joined the Carnegie-Mellon University faculty. He wanted to design an operating system, but first launched the Bliss project to design an appropriate implementation language [Wulf1971]. One of the graduate students assisting him was Charles Geschke (1939—2021) [Footnote 1]. Richard Johnsson (194?–) joined the project later. Also at CMU was graduate student James Mitchell (1944?–), who graduated with a PhD in interactive programming languages in 1970 and joined BCC as it was winding down.

By 1970 all these threads began to come together. Xerox Corporation, whose invention and refinement of xerographic plain-paper copiers had pushed it to position #9 on the S&P 500 and given it the cash to acquire Scientific Data Systems, maker of the SDS 940, opened the Palo Alto Research Center (PARC) to develop "the architecture of information." Bob Taylor was hired to staff the Computer Science Laboratory; his early hires included BCC veterans Lampson, Thacker, Deutsch, and Mitchell. And the next year he hired a group of people from Engelbart's Augmentation Research Center (ARC). With this talented and growing group of researchers, interesting things began to happen at PARC, and one of them emerged as a collaboration with ARC: the Modular Programming System (MPS) with the Modular Programming Language (MPL).

[Footnote 1]
Satterthwaite points out that Gesckhe's work on the optimizer for Bliss-11 likely impacted his designs for corresponding passes of the Mesa compiler [Wulf1972, 1975].

Papers and reports

[Deutsch1967]
L. P. Deutsch and B. W. Lampson. QSPL Reference Manual. Document No. R-28, University of California, Berkeley, 12 June 1967, revised 1 March 1968. PDF at bitsavers.org
[Lampson1969]
Butler W. Lampson. SPL Reference Manual. Memo M-1.2, Berkeley Computer Corporation, 3 November 1969. PDF at bitsavers.org
[Wirth1971]
Niklaus Wirth. The Programming Language Pascal. Acta Informatica, Volume 1, Fascicle 1, March 1971. SPRINGER NATURE Link / PDF at oberoncore.ru
[Wirth1973]
Niklaus Wirth. The Programming Language Pascal (Revised Report). D-INFK Technical Report 5, ETH, Zürich, July 1973. Online at ethz.ch
[Wulf1971]
W. Wulf, C. Geschke, D. Wile, and J. Apperson. Reflections on a systems programming language. In Proceedings of the SIGPLAN Symposium on Languages for System Implementation. Association for Computing Machinery, New York, 1971, pages 42–49. ACM Digital Library
[Wulf1972]
W. Wulf, J. Apperson, R. Brender, C. Geshke, P. Knueven, C. Weinstock J. Zarella, and D. Wile. BLISS-11 Reference Manual: A Basic Language for the Implementation of System Software for the PDP-11. Computer Science Department, Carnegie-Mellon University, 1 March 1972. kilthub.cmu.edu
[Wulf1975]
William Wulf, Richard K. Johnson, Charles B. Weinstock, Steven O. Hobbs, and Charles M. Geschke. The Design of an Optimizing Compiler. Elsevier Science Ltd, 1 January 1975.

MPS

The MPS project got underway in 1971 with the goal of producing "a set of tools for the development and continuing evolution of large software systems in an interactive environment" based on a modular runtime architecture and a matching higher-level language, MPL. Initial project personnel were to include William Paxton and Charles Irby at ARC and James Mitchell and Peter Deutsch at PARC, with Butler Lampson and Alan Kay at PARC expected to be contributing to the design [Paxton1971]. The target of MPS would be systems constructed by groups of people, and consisting of separately-developed programs. A reimplementation of NLS for MPS was discussed (see [Irby197x]), and would allow porting NLS to other computers [Engelbart1973]. MPS was to be structured in terms of components called modules that could be written and compiled independently, but could be linked together in flexible ways, supporting flexible control structures such as messages sent over ports. Data definition facilities would allow defining structures used in the interfaces between modules, and also those used internally to the implementation of a module. Libraries of software components—modules of high generality—would be built up over time [Footnote 2]. There would be integration with NLS, a source language debugger, and the ability to recompile and replace a module in a running system [Paxton1971], [Mitchell1972a]. By this time NLS was running on the PDP-10 under BBN's TENEX.

The version of NLS running on the SDS 940 was built using tools developed at SRI. MOL940 was a machine-oriented language with an ALGOL-like syntax, somewhat like Wirth's PL360 [Hay1968]. Tree Meta was a translator-writing system used to build the parser for MOL940 as well as several Special Purpose [domain-specific] Languages [Hay1968, Andrews1967, Engelbart1968]. In 1970, when it was decided to reimplement NLS on a PDP-10 running the TENEX operating system, a new language L10 was designed to replace L10. It was bootstrapped on the 940, using Tree Meta [Engelbart1971]. Tree Meta and L10 were used to build the first version of MPS and MPL, and the MPL specifications use Tree Meta notation for syntax.

The PARC researchers wanted a PDP-10 running TENEX, but weren't allowed to purchase a competitor's machine (Xerox had acquired SDS in 1969). Their response was to design and build a PDP-10 clone called MAXC. Until it was completed (around 1973?), they used NLS PDP-10 at SRI.

[Footnote 2]
Perhaps Paxton read Doug McIlroy's invited lecture "Mass Produced Software Components" at the 1968 Nato Software Engineering Conference, although Paxton's memo was much more specific about a modular approach. Online at www.cs.dartmouth.edu/

Papers and reports

[Andrews1967]
D. I. Andrews and J. F. Rulifson. Tree Meta: A Meta Compiler System for the SDS 940. Working Draft. Stanford Research Institute, Menlo Park, California, 29 December 1967. PDF at bitsavers.org
[Engelbart1968]
D. C. Engelbart, W. K. English, and J. F. Rulifson. Development of a Multidisplay, Time-Shared Computer Facility and Computer Augmented Management-System Research. Technical Report, Stanford Research Institute, October 1968. PDF at bitsavers.org
[Engelbart1971]
D. C. Engelbart, principal investigator. Network Information Center and Computer Augmented Team Interaction. Technical Report RADC-TR-71-175, SRI Contract F30602-70-C-0219 under ARPA Order No. 967, June 1971, 99p. PDF at aps.dtic.mil
[Engelbart1973]
Douglas C. Engelbart, Richard W. Watson, and James C. Norton. The augmented knowledge workshop. In Proceedings of the June 4–8, 1973, National Computer Conference and Exposition (AFIPS '73). Association for Computing Machinery, New York, 1973, pages 9–21. ACM Digital Library
[Hay1968]
R. E. Hay and J. F. Rulifson. MOL940: Preliminary Specification for an ALGOL-like Machine-Oriented Language for the SDS 940. Interim Technical Report 2, Project 5890, Study for the Development of Human Intellect Augmentation Techniques, Stanford Research Institute, March 1968. PDF at bitsavers.org
[Irby197x]
Charles Irby. Suggested MPS NLS Organization. Undated; circa 1972. Block diagram. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 3. PDF
[Mitchell1972a]
James G. Mitchell. Introduction to the Modular Programming System. MPS document 2.0, 12 May 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 6. PDF
[Paxton1971]
William H. Paxton. What are we looking for in MPS? <PAXTON>MPS.NLS;7, 10 June 1971. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 3. PDF

MPL

The design for MPL built on languages familiar to the designers but sought to provide a new modular framework, with emphasis "on the more global parts of a programming system: control transfers between modules, binding of external references, [and] specifying the execution context of a module" [Lampson197x]. This undated document described an intriguing system. A module would contain a set of ports, each labeled with an identifier and tagged with a type: apparently two record types, describing arguments and results of a control transfer. A port could be bound to a port in another module with matching types; this could occur during runtime or earlier. A set of partially-bound modules could be configured as a new module, with only the unbound ports exposed. Instances of modules could be created dynamically. A single control transfer mechanism would unify procedure call/return, coroutines, and signals (dynamically-bound exception handlers with resumption, termination, and unwind handlers). Types could be built up using the type constructors array, record, pointer, and union. Type descriptors would be another type that could be manipulated by programs such as the binder (which could check for compatibility between source and destination ports) and the debugger. In general, the MPS environment would be a carefully-specified virtual machine all of whose components would be accessible to a program. There were many new ideas here, although the paper credited Bliss, Pascal, and SUE for control and data structuring mechanisms, Simula for dynamic creation of module instances, PL/I and Snobol for ideas leading to signals, Algol 68 and Pascal for type constructors, BBN Lisp for a logically complete virtual machine plus the ability to trace or trap a function call, and Multics for dynamic linking.

The earliest known MPL language specification [Mitchell1972d] describes a language with a global structure similar to BCC's SPL: a sequence of data and program modules, each of which could use INCLUDE directives to gain access to declarations from other data modules. Data modules contained declarations of constants and variables. Program modules contained declarations of constants, variables, and procedures, and also included an unnamed block that executed at initialization time. Both data and program modules could have a formal parameter list to pass values when an instance of that module was created.

The data model was similar to QSPL or BCPL: single-word types, no differentiation between integers and pointers, integer arrays, bit-oriented field definitions. Declarations were Algol-like, introduced with the word DECLARE and possibly including an initial or constant value:

DECLARE INTEGER i, j ← 0, K = 50; % INTEGER assumed if no type given %

Types included INTEGER, STRING, SIGNAL, ARRAY, FIELD, PROCEDURE, and PORT. Apparently the only array element type was INTEGER. A FIELD defined a bit offset and size of a field within a word. A SIGNAL defined an exceptional return from a procedure. A PORT defined a cell used to coordinate coroutine linkage between programs. There was a separate RECORD declaration that allowed definition of groups of fields, which were not tied to any particular pointer or record type, and a REGISTER declaration for defining an (integer) variable with a specified machine address; addresses 0–15 on the PDP-10 were the registers.

Expressions included the usual Algol-like operators (including conditional and case expressions). The relational operators include ones for classifying characters within various subsets such as uppercase letter, digit, etc. Primaries included constants, variables, register variables, procedure calls, array references, and pointer dereferencing (with or without field selection).

Statements included assignments, if and case statements, a rich set of iterative statements, procedure call/return (optionally with multiple result values), process control statements for instantiating, starting, stopping, and transferring control to program modules. It was planned that the hierarchical structure of NLS document files would eventually replace the use of BEGIN and END as a means of forming compound statements.

Meeting notes from February 1972 by Charles Irby (then at SRI) gave this tentative schedule [Irby1972]:

Consistent with that schedule, a March 1972 memo described an "MPL Datatype Facility." [Paxton1972b] This memo mentioned Pascal-like basic types and type constructors for pointers, dynamic arrays, records, records, and unions—similar to [Lampson197x]. It also spoke of the benefits of type checking on debugging and raising the level of abstraction of the program. It critiqued Algol 68 for its choice of structural type equivalence for record types, citing the example of a complex number represented with cartesian or polar coordinates and concluding the need to "label" record types. ([Lampson197x] says "It is possible to compare two types for
structural or for literal identity.") Paxton's memo mentioned automatic coercions but said most coercions would be handled with explicit transformation functions.

Ed Satterthwaite arrived at PARC and joined the MPL project around this time [Satterthwaite 2025]

"By the time I arrived at PARC (August 1972) there was a working but incomplete MPL. ... MPL evolved in part from a language called L10, which was a structured implementation language for the PDP-10/DEC10/DEC20 done at SRI. There was some collaboration and perhaps some shared code for a while. If I recall, Bill Paxton was our primary contact at SRI."

[Mitchell1973a] is a specification for the data portion of the language. It is substantially advanced from [Mitchell1972d], having comparable functionality to [Paxton1972b] but is worked out in detail rather than a high-level overview. Perhaps it was a proposal that wasn't implemented at the time, because the later [Satterthwaite1974a] described a simpler language that seems to have actually existed at the time it was written [Footnote 3]. The global structure of the language was relatively unchanged. There was still no way to define an interface to a set of procedures, as became possible with the definitions modules of Mesa and, later, Modula-2. Variable declarations were similar to Pascal, but type expressions were still limited (e.g., array elements were still restricted to single-word values, pointer types could only be declared for record or field types. TYPE declarations were restricted to RECORD types. Type checking was restricted to checking overall size (number of bits); pointers could be declared without a target type, and field selectors could be applied to any pointer value.

Here's a short example [Satterthwaite1974a]:

f: PROCEDURE [n : INTEGER] RETURNS [INTEGER] =
BEGIN -- an MPL factorial function of course --
x: INTEGER ← 1; i: INTEGER;
FOR i THRU (1..n] DO x ← x*i;
RETURN[x]
END

Library code written the previous month (see NEWFSP.NLS and NEWMPSSTR.NLS below) provides larger examples. The keyword MODE was used instead of TYPE. The use of the NLS system for source code is evidenced by the hierarchical line numbers in the right margin and by identifiers enclosed in parenthesis used as labels—these were links, analogous to hyperlinks in modern web documents.

[Footnote 3]
[Satterthwaite1974b] says "MPL(B) is an interim language providing limited extensions of MPL(A) in a form intended to be compatible with subsequent versions of MPL." Perhaps the next version was to have stronger type checking?

XFER and runtime

The earliest known MPS planning documents [Paxton1971] and [Mitchell1972a] both indicate the desire for non-local control structures more general than procedure call/return. Paxton specifically mentioned Rudy Krutar's use of ports for coroutine discipline in a parser, and "somewhat more grandiose schemes" considered by Robert Balzer. Presumably the corresponding publications were [Krutar1971] and [Balzer1971]. To address this desire, a design emerged based on a universal sequential control transfer primitive known as XFER [Lampson1972]. The design, further refined and abstracted in [Lampson1974], unified port calls (coroutines), procedure call/return, and signals. The mechanisms (including heap-allocated frames) described in this report became part of the Mesa virtua machine specification [Johnsson1982]. Further, they were supported in the Mesa language via the PORT and SIGNAL mechanisms of Mesa (see Chapters 8 and 9 of [Mitchell1978]). [Lampson1982] revisits XFER and presents a set of performance optimizations for the procedure call/return case. And [Lampson1983a] says "Use of ports is complex, unsafe and not recommended."

[Deutsch1972a] and [Mitchell1972b] describe the control transfer mechanism as well as mechanisms for binding contexts at runtime. Deutsch's paper was written for the Fall Joint Computer Conference, but never published. [Mitchell1972c] is a reference for the runtime. [Paxton1972a] is a reference for the MPS segmented virtual memoy implemented in software above the TENEX operating system's paged virtual memory.

***** Ed: Do you recall discussions about the following language features mentioned in [Lampson1974]?

"There is also a way to prevent components of a record from being accessed except by a group of procedures which are declared with it. Such a record is called closed, and the procedures are called its handles. Finally, it is possible to declare a record type s as a direct extension of another record type r, by adding additional components and handles. Extension is the transitive closure of direct extension, and the set of all extensions of r is the class of r. Closed records and classes were inspired by the class mechanism of Simula [Hoare and Dahl]; that language, however, encourages the restriction of access to handles, but does not enforce it."

Debugger

Improved debugging was one of the earliest MPS goals. Source-level debugging and integration into the NLS environment with its multiple-windowed graphical display were cited. Some of the improvements to debugging were expected to follow from the modular nature of the system, such as controlling intermodule connections to isolate a module for testing and using the system itself to build new debugging tools [Paxton1971], [Mitchell1972a]. An unsigned, undated memo titled "The MDS Debugger (this is, of course, a first draft)" outlines facilities to be provided to the user and system facilities required from the runtime for use by the debugger [Anonymous197x].

June 1972 minutes by PARC researcher Ed McCreight reported on an MPS debugger design meeting held on 8 June 1972 by Lampson, Deutsch, Mitchell, and McCreight [McCreight1972]. Several aspects of MPS's use of ports and context pointers rather than call stacks were explored. There was also a brief digression into accounting for resource usage by a service process (coroutine) invoked by several user processes.

A September 1972 document from Mitchell and recently-arrived Satterthwaite combined minutes from meetings in June and August with an initial specification for debugger functionality and implementation [Mitchell1972e]. The June meetings included Mitchell, Lampson, and Irby (6/21), and Mitchell, Lampson, Deutsch, and Paxton (6/27), and covered requirements for debugger functionality. The August meetings (8/23,24,25) included Mitchell, Satterthwaite, and Donald D. Cowan (Mitchell's undergraduate supervisor from Waterloo, on sabbatical at Stanford and PARC), and descended to various aspects of debugger implementation as well as approaches for name binding within the debugger's interpretive command language. The final section, "Initial Debugger Design Specification", was written by Mitchell, and sketched the command language, which was based on an interpreter for MPL-like expressions (including assignment) supplemented with procedures for examing and modifying data structures, tracing, setting breakpoints, etc. It also covered how variables of this interpretive language would be represented in the debugger.

By January 1973, Satterthwaite, whose Ph.D. thesis work involved symbolic debugging and tracing in the Algol W context, had released the first of several detailed specifications for the debugger, which included a number of built-in procedures and which could invoke externally-defined packages [Satterthwaite1973a]. One such package was Meter, which was documented in [Satterthwaite1973b]. An updated version of the debugger document was published in 1974 [Satterthwaite1974b].

Papers and reports

[Anonymous197x]
Anonymous. The MPS Debugger. Undated. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 13. PDF
[Balzer1971]
R. M. Balzer. PORTS: a method for dynamic interprogram communication and job control. In Proceedings of the May 18-20, 1971, Spring Joint Computer Conference (AFIPS '71 (Spring)). Association for Computing Machinery, New York, 1971, pages 485–489. ACM Digital Library
[Deutsch1972a]
L. Peter Deutsch. <FJCC.NLS>;10, 30 March 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 4. PDF
[Deutsch1972b]
L. Peter Deutsch. Full tilt into the heffalump trap. <HJOURNAL>l0042.NLS;l, 11 April 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 3. PDF

"We always re-invent the wheel 'just one more time, then it'll be right.' We essentially went back to the machine level to implement MPS, rather than starting with an established system. We could have lifted the BLISS compiler, used SIMULA 67 as a semantic base, or written an interpreter in LISP. Although Tree-Meta and L10 have helped us write our own code, we haven't used any part ot them or any part of any other existing software."

[Hoare1972]
C. A. R. Hoare and O.-J. Dahl. Hierarchical Program Structures. Pages 175-220 in Structured Programming, Academic Press, New York, 1972. PDF at seriouscomputerist.atariverse.com
[Irby1972]
Charles H. Irby. Xerox Meeting Notes. <GJOURNAL>9219.NLS;1, 22 February 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 3, folder 2. PDF
[Johnsson1982]
Richard K. Johnsson and John D. Wick. An overview of the Mesa processor architecture. In Proceedings of the First International Symposium on Architectural Support for Programming Languages and Operating Systems (ASPLOS I). Association for Computing Machinery, New York, 1982, pages 20–29. ACM Digital Library
[Krutar1971]
Rudolph A. Krutar. Conversational systems programming by incremental extension of system configuration. In Proceedings of the International Symposium on Extensible Languages. Association for Computing Machinery, New York, December 1971, pages 113–116. ACM Digital Library
[Lampson197x]
Butler Lampson. Modular Programming System. Undated. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 4. PDF
[Lampson1972]
Butler Lampson. New Control Transfer Mechanism. Xerox PARC interoffice memo. 21 April 1972. PDF at bitsavers.org
[Lampson1974]
B. W. Lampson, J. G. Mitchell, and E. H. Satterthwaite. On the transfer of control between contexts. Lecture Notes in Computer Science, Volume 19, Springer, 1974, pages 181-203.
PDF (Preprint with all figures) / Author's web site (Figure 6 missing!) / SPRINGER NATURE Link (All figures missing!)
[Lampson1982]
Butler W. Lampson. Fast procedure calls. In Proceedings of the First International Symposium on Architectural Support for Programming Languages and Operating Systems (ASPLOS I). Association for Computing Machinery, New York, 1982, pages 66–76. ACM Digital Library
[McCreight1972]
Ed McCreight. MPL Debugger: MPL Meeting Notes 6/6/72. Palo Alto Research Center, Xerox Corporation, 8 June 1972, Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 3. PDF
[Mitchell1972b]
James G. Mitchell. A Model for MPS Processes and Environments. <DOCMPS>CHAPTER2.NLS;20, MPS document 4.0, 22 June 1972, PDF at bitsavers.org
[Mitchell1972c]
James G. Mitchell. MPS Runtime Reference Manual. <DOCMPS>DOCRUNTIME.NLS;29, MPS document 10.0. 11 August 1972. PDF at bitsavers.org
[Mitchell1972d]
James G. Mitchell. MPS Language reference manual. MPS document 11.0, 4 September 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 6, folder 1. PDF
[Mitchell1972e]
James G. Mitchell] and Edwin H. Satterthwaite. Debugger meetings and specifications. MPS document 5.1, 4 September 1972. Charles H. Irby Papers, 1962–1975, Special Collections M0671, box 6, folder 2. PDF ***** The author affiliations on the title page imply JGM was an SRI employee
[Mitchell1973a]
James G. Mitchell. MPSDATA. 24 January 1973. Charles H. Irby Papers, 1962–1975, Special Collections M0671, box 2, folder 3. PDF
[Mitchell1973b].
James G. Mitchell. The Implementation of NLS on a Miniomputer. Xerox PARC Research Report CSL 73-3, August 1973; NIC #18941. PDF at bitsavers.org
[Paxton1972a]
William H. Paxton. MPS Segmentation System Overview. <DOCMPS>DOCSEG.NLS;6, 4 February 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 5, folder 1. PDF
[Paxton1972b]
William H. Paxton. MPL Datatype Facility. <PAXTON>MPL.NLS;5, 30 March 1972. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 3. PDF
[Satterthwaite1973a]
E. H. Satterthwaite and Donald D. Cowan. [The MPS Debugger]. (EHS, DDC, 1/3/73), 13 pages. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 11. PDF
The document erroneously says "1/3/72".
[Satterthwaite1973b]
E. H. Satterthwaite. MPS Metering Package, 22 February 1973. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 2, folder 11. PDF
[Satterthwaite1974a]
E. Satterthwaite. MPL(B): A Modular Programming Language for Software Construction. DOCMPS, MPL-B.NLS;1, (printed 25 February 1974). Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 6, folder 2, Stanford University. PDF
[Satterthwaite1974b]
E. Satterthwaite. [The MPS Debugger]. DOCMPS, DEBUGGER.NLS;1, (printed 25 February 1974), 19 pages. Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671, box 6, folder 2. PDF
[Satterthwaite2025]
Ed Satterthwaite. Personal communication, November–December 2025.

Source code

Transition to the Alto and Mesa

***** Ed: When were DEFINITIONS modules added? [Deutsch1972a] says:

"We have in mind that during early development of a program, when the human overhead of writing declarations might be onerous, and also in those few cases where it is impossible to specify the interface properly within the language, we will have some kind of interpretive mechanism which will verify the compatibility of data across control interfaces at run time."

By late 1974, the MPL(B) implementation included a loader, debugger, and editor. It ran on MAXC, PARC's PDP-10 clone running TENEX. The name Mesa was beginning to be used, a port to the Alto was underway, and the system was being used fairly widely within PARC [Heinrich1974]. Mesa had a richer type system and strong type checking. Its syntax was based on Pascal; its type system was influenced by Pascal and Algol 68.

The Alto, PARC's pioneering personal computer, was conceived in late 1972. The first prototype ran in April 1973 and the first software (operating system, BCPL compiler, and simple text editor) was released in March 1974. The first batch of production machines were built between March and September 1974 [Thacker1988].

Satterthwaite noted [Satterthwaite2025]:

"Chuck Geschke arrived at PARC not too long after I did [August 1972]. He spent his initial few months on MAXC diagnostics and commissioning, then joined the MPL project. When the first Altos were imminent, Chuck and I wanted to move immediately to the Alto. ... Eventually Chuck and I decided to ... [devote] all our efforts to a port and refinement of Mesa on the Alto."

Three memos from the summer of 1974 give a feeling for the design work taking place. [Mitchell1974] discussed "What Mesa needs in an Alto Virtual Memory Scheme." The Alto did not have dedicated hardware for memory mapping, but could be microcoded to use its hardware registers as base pointers for things like local and global frames and code segments. Mitchell's memo suggested a notion of page groups (adjacent pages) that would be contiguous both in memory and on the disk backing storage. [Wegbreit1974] reports on dynamic and static measurements taken of two Mesa programs using an instrumented PDP-10 emulator (running on MAXC, a PDP-10 clone). The dynamic measurements were then used with page replacement model to predict the performance of Alto Mesa. The static measurements were used to guide design of compact encodings for the instruction set of a virtual machine designed to run Alto Mesa programs. [Satterthwaite1974c] presented a plan for porting Mesa to the Alto. The plan, including a dependency diagram and time estimates, suggested that the four implementors (Geschke, Mitchell, Satterthwaite, and Richard Sweet Sweet) could complete a "slow but usable" version by the end of 1974, although that would delay planned work on data structuring facilities. One step of the plan was to "write an interpretive engine in BCPL." Satterthwaite notes "I'm reasonably sure that never happened. I think we just ran on increasingly complete and accurate simulators on Tenex and then went to microcode" [Satterthwaite2026].

The 1976 paper "Early Experience With Mesa" reported [Geschke1976a]:

"A cross-compiler for Mesa became operational in the spring of 1975. We used it to build a small operating system and a display-oriented symbolic debugger. By early 1976, it was possible to run a system built entirely in Mesa on our target machine, and rewriting the compiler in its own language was completed in the summer of 1976. The basic system, debugger, and compiler consist of approximately 50,000 lines of Mesa code, the bulk of which was written by four people. Since mid-1976, the community of users and scope of application of Mesa have been expanding rapidly, but its most experienced and demanding users are still its implementers."

The Alto's single address space was shared by the operating system and the user program, as was the case with later personal computers such as the Altair and the Apple II. The original Alto operating system was written in BCPL and assembly language. As part of the effort to port Mesa to the Alto, Richard Johnsson and John Wick wrote a Mesa operating system that could interoperate with the BCPL file system and provided a debugger, display services, stream I/O, etc.

As the native Alto version of the Mesa compiler was being finished during 1976, the cross-compiler that ran on MAXC and generated code for the Alto was available to users as well as the Mesa development team, but there were frequent releases of the native Alto version. On 1 December 1976 the TENEX version of the Alto/Mesa compiler was deleted, and the Alto version was officially released. The extensive system documentation included a reference grammar for the language; apparently a Mesa Language Manual, Version 1.0, had been published but no copies are known [Geschke1976b].

On 11 January 1977, Niklaus Wirth, then on sabbatical at Xerox PARC, gave a talk on his experience with Mesa:

Date: 10 JAN 1977 0947-PST
From: JENKINS
Subject: DEALER, Tuesday, 11 January 1976
To: PARC/SDD:
  
Niklaus Wirth of CSL will talk about Joys and Perils with Mesa on
Tuesday, 11 January 1976 at 1:15 pm, CSL Common.

ABSTRACT: I have recently studied Mesa in the recommended and popular "do it"
manner. As Mesa will have to be learned by many Xerox programmers in
the near future, perhaps a report about a novice's successes and frustrations
will be of interest. I will comment on some language features and relate
them to similar constructs in Pascal.

In 1992, he said, "The idea of separate modules with separate interface definitions stemmed from the Mesa project at Xerox PARC, and it truly constituted one of the rare breakthroughs in software engineering." [Wirth1992]

Papers and reports

[Frandeen1974]
Jim Frandeen. Reentrancy, Recursion, and Coroutines for OIS Programming Language. December 19, 1974, 10 pages. PDF at bitsavers.org
[Heinrich1974]
P. Heinrich and W. Shultz. Selection of a System Programming Language for OIS. Inter-Office Memorandum, Xerox Corporation, December 17, 1974, 8 pages. PDF at bitsavers.org
[Elkind1975]
Jerry Elkind, Butler Lampson, and Jim Mitchell. Comments on the Selection of Mesa for the OIS System Programming Language. January 2, 1975, 2 pages. PDF at bitsavers.org

"We are concerned about parts of the proposed action plan for implementing Mesa on the Sigma under CP-V.

First, the MAXC version of Mesa is not the appropriate take-off point for such an implementation. The Alto version is the one to start with. We are now concentrating on the Alto version, making considerable improvements in it, and are not intending to upgrade the Maxc version to maintain compatibility between it and the Alto one.

... A Mesa Virtual Machine has not yet been specified and needs to be."

[Geschke1975]
C. M. Geschke and J. G. Mitchell. On the problem of uniform references to data structures. In Proceedings of the International Conference on Reliable Software. ACM, New York, April 1975, pages 31-42. ACM Digital Library

***** Were any of these ideas implemented in Mesa? E.g., types and constants as record fields, generic procedures (overloaded on argument/result types). Note the single reference to "MPL," at the bottom of page 32.

[Geschke1976a]
Charles M. Geschke, James H. Morris, Jr., and Edwin H. Satterthwaite. Early experience with Mesa. CSL-76-6, Xerox PARC, October 1976. PDF at bitsavers.org Also published as Commun. ACM, Volume 20, Number 8 (August 1977), pages 540-553. ACM Digital Library
[Geschke1976b]
Charles M. Geschke, Charles Irby, Richard K. Johnsson, Edwin H. Satterthwaite and John D. Wick. Preliminary Mesa System Documentation. December 1, 1976. PDF at bitsavers.org

"The Mesa, language, compiler and programming system are the product of a long-standing research project at Parc, in which Chuck Geschke, Butler Lampson, Jim Mitchell, and Ed Satterthwaite have been the main participants. The current compiler was written by Geschke and Satterthwaite. They also wrote the debugger and support software needed to run Mesa programs on the Alto, in collaboration with Jim Mitchell and with Charles Irby, Richard Johnsson and John Wick of SDD/Palo Alto. Compiler testing has been done by Jim Frandeen of SDD/Palo Alto."

[Lampson1988]
Butler W. Lampson. Personal Distributed Computing: The Alto and Ethernet Software. In Adele Goldberg, editor, A History of Personal Workstations, Addison-Wesley, 1988, pages 291-344. Author's web site
[Mitchell1974]
Jim Mitchell. What Mesa needs in an Alto Virtual Memory Scheme. Inter-Office Memorandum, Computer Science Laboratory, Palo Alto Research Center, Xerox Corporation, 12 June 1974, 4 pages. PDF at bitsavers.org
[Satterthwaite1974c]
Ed Satterthwaite. Mesa for the Alto. Inter-Office Memorandum, Computer Science Laboratory, Palo Alto Research Center, Xerox Corporation, June 15, 1974, 4 pages. PDF at bitsavers.org
[Satterthwaite2026]
Ed Satterthwaite. Personal communication, January 2026.
[Thacker1988]
Charles P. Thacker. Personal Distributed Computing: The Alto and Ethernet Hardware. In Adele Goldberg, editor. A History of Personal Workstations, Addison-Wesley, 1988. Co-author's website
[Wegbreit1974]
Ben Wegbreit and Chuck Geschke. The Implementation of Mesa on Alto. Inter-Office Memorandum, Computer Science Laboratory, Palo Alto Research Center, Xerox Corporation, August 21, 1974, 12 pages. PDF at bitsavers.org
[Wirth1992]
Niklaus Wirth. Thirty Years of Programming Languages and Compilers. International Workshop on Compiler Construction (CC92), Paderborn, Germany, 5–7 October 1992. PDF at cs.tufts.edu

Mesa

By 1974 Xerox had launched the OIS (Office Information System) group to design and build computer-based office automation systems. The group was based in El Segundo, California, and was staffed by former Scientific Data Systems employees. Early planning indicated the need for a high-level systems programming language for OIS, and MPL, or Mesa as it was beginning to be called, was selected [Heinrich1974], [Frandeen1974], [Elkind1975]. By 1976 the OIS effort had expanded to include an organization known as SDD in Palo Alto that was responsible for OIS hardware (processor and local area network) and system software: the Mesa compiler, debugger, and other tools, plus an operating system (Pilot) that included communications and networking, all written in Mesa. The group in El Segundo focussed on application software: a compound document editor, electronic filing and mail, etc. This was first released in 1981 as the Xerox Star 8010 Information System. While Mesa development shifted from PARC to SDD, PARC researchers continued to use Mesa.

Large programs on small machines

While the original MPL compiler generated standard PDP-10 machine instructions, the Alto offered a challenge and an opportunity. The challenge was a small address space: 16-bit addresses and 16-bit words. The opportunity was the Alto's writable control store, allowing the instruction set to be tailored for a specific language. The default microcode (used for BCPL programs) was based on the Nova minicomputer. Smalltalk had its own instruction set. The Mesa instruction set was designed to maximize code density based on an empirical study of the entropy in a large set of Mesa programs [Sweet1978, 1982].

"It is ironic that some of our successes have produced some of our largest shortcomings. The Alto, on which we first implemented Mesa, was a very modest machine with only 16 bits of address space and no hardware support for virtual memory. We nonetheless implemented a compiler for a large language that ran on the Alto with respectable performance. This was done by carefully tailoring the data structures and algorithms to fit into the restricted space. As machines became larger, the data structures could not gracefully grow, so the current compiler still limits program size to about 1000 lines. The Mesa language itself has not been immune from this type of premature optimization. The two classes of pointers (short and long) in the language are largely an artifact of the original Alto implementation. The treatment of OPEN as substitution by name was partly motivated by the need to live with relocating storage management schemes on the Alto" [Sweet1985].
***** Is there more to say about packed records or ... ?

Intermodule typechecking

"In 1977 (Mesa 3.0), we introduced strong intermodule type checking by means of interfaces and the Binder. The ability to check procedure parameters at compile or load time was a clear win. It often took a while to produce a consistent version of a large system, but once it could be loaded, it would usually run well enough that the programmer could start looking for logic errors. The early days of binding are described in some detail in a paper by Lauer and Satterthwaite [Lauer1979]." [Sweet1985]

***** Does Ed have more to say about this?

Processes

In early 1977 a joint SDD-CSL (PARC) working group was convened to determine what process mechanism(s) should be included in the OIS environment: Mesa and the Pilot operating system [Redell1977]. Although there was some sympathy toward the simplicity of non-preemptive scheduling, it was generally agreed that preemptive scheduling would be necessary. Monitors and condition variables were identified as the appropriate synchronization mechanism [Brinch Hansen1973], [Dijkstra1972], [Hoare1974]. The resultant design simplified and optimized the wait/notify semantics and added a cancellation mechanism [Redell1978], [Lampson1980a]. Processes were added to Mesa 4.0 in May 1978. A very similar design was used in Modula-2+ and Modula-3, and was later standardized as IEEE POSIX Threads.

Transition to D machines

Alto/Mesa used 16-bit word addresses to access variables in local and global frames and heap zones. A special version, XMesa, supported the switched memory banks of a "wide-bodied Alto" for code segments. With the adoption of Mesa for Office Information System (OIS) products, the address space was expanded to 24 bits of paged virtual memory. Part of the process state was a page-aligned base pointer to a 64K-word Main Data Space (MDS), which held the local and global frames. The instruction set was formalized as the OIS Processor Principles of Operation [PrincOps1977]. The initial implementations of this architecture were the D0, renamed the Dolphin, and the D1, renamed Dorado. Later came Dandelion and Dicentra.

After Mesa 5.0, the paths taken by PARC and SDD began to diverge. Some of the early language changes for Cedar were incorporated into Mesa 6.0. But eventually the needs of garbage collection and other changes led to incompatibility at the virtual machine level and higher. The development of Cedar is covered in the section The Cedar Language below. Mesa became part of the Xerox Development Environment, which included ...

"The Pilot/Tajo programming environment was used within Xerox to create the Star and Viewpoint office systems, and later became the Xerox Development Environment (XDE) product, marketed by the Xerox Information Systems Division." [Swinehart1986]

***** WALLACE, D. Tajo Functional Specification, version 6.0. Xerox internal document, Oct. 1980.

***** [Sweet1985]

***** https://bitsavers.org/pdf/xerox/xde/

https://bitsavers.org/pdf/xerox/xde/XDE_5.0_Dec86/XDE3.0-3001_Mesa_Language_Manual_Version_3.0_Nov1984.pdf

Papers and reports

Source code and documentation

Mesa 1.0

Mesa 3.0

Mesa 4.0

"The language accepted by the Mesa 4.0 compiler has several significant extensions and a few minor changes. It features a process mechanism, enhanced arithmetic capabilities, long and base-relative pointers, and more general block structure" [Satterthwaite1978].

- - -

"The primary emphasis in this release has been on three areas: implementation of features required by Pilot and Dstar applications for effective use of the new machine architecture (processes. monitors, long pointers, etc.), reduction of overhead in the basic system structures and improved performance of the Mesa runtime environment (faster microcode, smaller global frames, more efficient memory management). and extension of the debugger's capabilities (primarily an interpreter for a subset of the Mesa language)" [Redell1978].

Mesa 4.1

Mesa 5.0

Mesa 6.0

"Note also that Mesa 6.0 adopted, at least in part, a number of the additions to Mesa proposed in [Cedar] 6C2. These include the ability to control the initialization of a variable according to its type, generic NIL, zones with NEW and FREE operations, sequence types, and a restricted form of opaque types." [CLFDC1981]

Mesa 7.0

Released circa 1981. (Cedar 7T7 was released in May 1981 [Satterthwaite1981a].)

...

Mesa 11.0

...

Mesa 14.0

Applications written in Mesa

As soon as Mesa was running on the Alto, it began being used at PARC for research projects and shortly thereafter at Xerox SDD for a family of office automation products.

Some of PARC's research projects written in Mesa include:

***** Look through CSL reports for more

***** Add http://www.bitsavers.org/pdf/xerox/parc/techReports/CSL-77-1_Schemes_-_A_High_Level_Data_Structuring_Concept_197701.pdf ?

***** http://www.bitsavers.org/pdf/xerox/parc/techReports/CSL-79-12_Violet_an_Experimental_Decentralized_System.pdf

***** http://www.bitsavers.org/pdf/xerox/parc/techReports/CSL-79-14_Weighted_Voting_for_Replicated_Data.pdf

Some of Xerox's products built with Mesa include:

The Cedar language

With its 16-bit address space and 128–512 KByte memory (the latter requiring bank-switching), the Alto seems like a toy compared to modern computers, and yet the PARC researchers built a series of pioneering applications, including the Bravo WYSIWYG text editor, the Draw and Markup illustration programs, and the Grapevine electronic mail system. But integration of these applications had to happen through the file system; it wasn't possible to run more than one at a time. By 1978, the first prototype of the Dorado personal computer was running. This machine, with a much faster processor, a 28-bit virtual address space, and 8 MByte or more memory, would allow the design of large, integrated systems combining text, graphics, audio, and more. [Lampson1980b], [Pier1983].

An effort was initiated with the Computer Science Laboratory to take stock of the three main environments in use at PARC (Interlisp, Mesa, and Smalltalk) and plan for the future [EPEWG], Deutsch1980]. As a result of this effort, the Cedar project began in 1979, producing a new Cedar language as well as a rich programming environment—see The Cedar system below.

During spring 1979 various language design subgroups investigated proposals for individual features, especially objects and safety. By fall a series of Cedar language proposals began appearing, with the initial digit (5, 6, 7) taken from the corresponding Mesa release.

Mesa 5C1
1 September 1979: see [CLFDC1979]
Mesa 5C2
Series of proposals from October 1979 through January 1980
Mesa 6C2
15 February 1980: see [CLFDC1980]
6C2 Atom amendment
22 April 1980: see [Horning1980]
Processes
2 April 1980—coexistence with the garbage collector: see [Birrell1980]
Signalling
7 May1980—exception handling within layered abstractions: see [Levin1980]
Mesa 6T5
16 January 1981—"a partial implementation of Mesa 6C2": see [CLFDC1981]
Cedar 7T7
20 May 1981—syntax for discriminated types; type discrimination; ROPE literals: see [Satterthwaite1981a]
Cedar 7T10
18 December 1981—predeclared types BOOL, CHAR, INT; numeric types and conversions; escape convention for text literals; APPLY and RETURN: see [Satterthwaite1981b]
Cedar 7T11
15 February 1982—dynamically typed procedures; SAFE/UNSAFE and CHECKED/TRUSTED/UNCHECKED: see [Satterthwaite1982]

The resultant Cedar language extended Mesa with [Anonymous1986]:

[Rovner1984] discussses implementation details for garbage collection and runtime types. [Owicki1981] presents the formal specifications of garbage collection that were used to define the safe subset of Mesa.

Kernel language

Having evolved over a decade including its MPL and Mesa roots, Cedar was a large and complex language, and documenting it was a challenge. This challenge was approached in two ways:

  1. Because of upward-compatibility with Mesa, the Mesa Language Manual [Mitchell1979] was a useful starting point. The Cedar Language Overview [Horning1983], [Anonymous1986] was useful for introducing the additional features of Mesa and Cedar to programmers familiar with Pascal, but it lacked the detail to serve as a manual. The Cedar Manual [Horning1983] contains the aforementioned Language Overview, extensive example programs, and documentation on the various tools available in the Cedar programming environment.
  2. Butler Lampson, with assistance from Ed Satterthwaite, wrote a very complete and detailed Cedar Language Reference Manual [Lampson1983a]. Chapter 2 of this manual defines a much smaller language, called the kernel. Chapter 3 then defines the full Cedar language by "desugaring" (rewriting) each construct into the kernel language. This document existed only in draft form from its completion in late 1983 until finally being published as a CSL technical report in November 1986.

    [Burstall1984] notes:

    "This paper describes a small programming language called Pebble, which provides a precise model for these features. It is a functional language, based upon the lambda calculus with types. It is addressed to the problems of data types, abstract data types and modules. It also deals with the idea of generic values. It does not reflect all aspects of programming languages, since we have not dealt with assignment, exceptions or concurrency, although we believe these could be added to our framework. Our intention is that it should be possible to express the semantics of a sizeable part of a real programming language by giving rules which rewrite it into Pebble. This follows the method used by Bauer and his colleagues [Bauer et al. 1979] to express the semantics of their wide spectrum language. We were particularly concerned with the Cedar language (an extension of Mesa [Mitchell et al. 1979]) which is in use at Xerox. One of us (BL) has defined the quite complex part of this language which is concerned with data types and modules in terms of rewrite rules which convert Cedar to an earlier version of Pebble; this work is described in an unpublished report [Footnote 4]."
[Footnote 4]
The reference is to [Lampson1983a].

System modeling

MPL, Mesa, and Cedar were designed for writing large, complex systems. The structure of modules and interfaces allows programs to be built up from component modules with explicit control of the interconnections. For example, there may be multiple implementation modules for a single interface, these implementation modules may be used in different configurations (e.g., different device drivers for different hardware) or even within the same configuration, for example different implementations of a hash table interface. This led to the System Modeling project [Lampson1980c, d], [Lampson1983b, c], [Schmidt1982a, b], at the center of which was SML, the System Modelling Language. The full SML is defined in Section 3 of [Lampson1983b]; an earlier version is defined in [Schmidt1982a]. It is a functional (side-effect free) typed lambda calculus operating on primitive values (STRING, TYPE, and INTERFACE n) and functions (built-in and closures), bindings (ordered sets of [name, type, value] triples and declarations (ordered sets of [name, type] pairs) and is "roughly the applicative subset of the Cedar Kernel language."

Papers and reports

***** Review/incorporate remaining documents from [_CD8_]<cedardocs>Language>

[Anonymous1986]
Anonymous. Cedar Language Overview. Version 5.2, 20 June 1986. PDF at bitsavers.org
[Birrell1980]
Andrew Birrell. Processes in Cedar. 2 April 1980. PDF (in [EPEWG])
[Burstall1984]
R. Burstall and B. Lampson. A Kernel Language for Modules and Abstract Data Types. Report 1, Systems Research Center, Digital Equipment Corporation, 1 September 1984. PDF at bitsavers.org
Also published in Semantics of Data Types, Lecture Notes in Computer Science 173, Springer, 1984, pages 1-50. Later version: B. Lampson and R. Burstall. Pebble, a Kernel Language for Modules and Abstract Data Types. INFORMATION AND COMPUTATION, Volume 76, pages 278-346 (1988). ScienceDirect
[CLFDC1979]
Cedar Language Features Design Committee. Cedar Mesa Proposal. PARC/CSL, Palo Alto, 1 September 1979. "The specific language design described here is called Mesa 5C1; since some design will proceed concurrently with implementation, it may not correspond exactly to any implemented version." [_CD8_]<cedardocs>lang>INTRO-CEDAR.BRAVO!3 HTML at xeroxparcarchive.computerhistory.org
[CLFDC1980]
Cedar Language Features Design Committee. Cedar Mesa-Version 6C2. PARC/CSL, Palo Alto, 15 February 1980. PDF (in [EPEWG])
[CLFDC1981]
Cedar Language Features Design Committee. Cedar Mesa Version 6T5. PARC/CSL, Palo Alto, 16 January 1981. [_CD8_]<cedardocs>lang>cedar6t5.press!1 PDF at xeroxparcarchive.computerhistory.org
[Deutsch1980]
L. Peter Deutsch and Edward A. Taft. Requirements for an Experimental Programming Environment. Report CSL-80-10, Palo Alto Research Center, Xerox Corporation. PDF at bitsavers.org
[EPEWG]
Experimental Programming Environment Working Group Papers. Palo Alto Research Center, Xerox Corporation, 1978–1981. Computer History Museum, acquisition number X9513.2021. These papers start with the two 1978 working groups, and continue with Cedar design documents through early 1981. PDF / Online at computerhistory.org
[Horning1980]
Jim Horning. 6C2 Atom Amendment. PDF (in [EPEWG])
[Horning1983]
Jim Horning, editor. The Cedar Manual. Version 4.2, 8 June 1983. Includes Cedar Language Overview, standard interfaces, example programs, and much more. PDF (from bitsavers.org)
[Lampson1980b]
B. W. Lampson and K. A. Pier. A processor for a high performance personal computer. Proc. 7th lnt. Symp. Computer Architecture, La Baule. France, May 1980. ACM Digital Library Also in Report CSL-81-1, Palo Alto Research Center, Xerox Corporation, January 1981. PDF at bitsavers.org
[Lampson1980c]
B. W. Lampson. System modelling, February 1980. Xerox PARC memo, 20 February 1980. PDF (in [EPEWG])
[Lampson1980d]
B. W. Lampson. System modelling, May 1980. Xerox PARC memo, 13 May 1980. PDF (in [EPEWG])
[Lampson1983a]
Butler Lampson. A description of the Cedar language. Report CSL-83-15, Palo Alto Research Center, December 1983. PDF (from bwlampson.site)
[Lampson1983b]
Butler W. Lampson and Eric E. Schmidt. Practical use of a polymorphic applicative language. In Proceedings of the 10th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL '83). Association for Computing Machinery, New York, 1983, pages 237–255. ACM Digital Library
[Lampson1983c]
Butler W. Lampson and Eric E. Schmidt. Organizing software in a distributed environment. In Proceedings of the 1983 ACM SIGPLAN Symposium on Programming Language Issues in Software Systems (SIGPLAN '83). Association for Computing Machinery, New York, 1983, pages 1–13. ACM Digital Library
[Levin1980]
Roy Levin. Guidelines for Signalling in Cedar. 7 May 1980. PDF (in [EPEWG])
[McDaniel1982b]
Gene McDaniel. An analysis of a Mesa instruction set using dynamic instruction frequencies. In Proceedings of the First International Symposium on Architectural Support for Programming Languages and Operating Systems (ASPLOS I). Association for Computing Machinery, New York, 1982, pages 167–176. ACM Digital Library
[Owicki1981]
Susan Owicki. Making the world safe for garbage collection. In Proceedings of the 8th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL '81). Association for Computing Machinery, New York, 1981, pages 77–86. ACM Digital Library
[Pier1983]
Kenneth A. Pier. A retrospective on the Dorado, a high-performance personal computer. In Proceedings of the 10th Annual International Symposium on Computer Architecture (ISCA '83). Association for Computing Machinery, New York, 1983, pages 252–269. ACM Digital Library
[Rovner1984]
Paul Rovner. On Adding Garbage Collection and Runtime Types to a Strongly-Typed, Statically-Checked, Concurrent Language. Report CSL-84-7, Palo Alto Research Center, Xerox Corporation. PDF at bitsavers.org
[Satterthwaite1981a]
Ed Satterthwaite. Cedar 7T7 Language and Compiler Changes. CSL, 20 May 1981. [_CD8_]<cedardocs>lang>CEDAR7T7.BRAVO!1,.PRESS!1 HTML / PDF at xeroxparcarchive.computerhistory.org
[Satterthwaite1981b]
Ed Satterthwaite. Cedar 7T10 Language and Compiler Changes. CSL, 18 December 1981. [_CD8_]<cedardocs>lang>CEDAR7T10.BRAVO!1,.PRESS!1 HTML / PDF at xeroxparcarchive.computerhistory.org
[Satterthwaite1982]
Ed Satterthwaite and Jim Donahue. Cedar 7T11 Language and Compiler Changes. CSL, 15 February 1982. [Cyan]<cedarlang>documentation>cedar7t11.press!1,.PRESS!1 PDF at xeroxparcarchive.computerhistory.org
[Schmidt1982a]
Eric Schmidt and Butler Lampson. Cedar System Modelling Reference Manual. 17 January 1982. Is this the older version mentioned in section 5.4 of [Lampson1983b]? [Indigo]<Cedar>ModelRefMan{1,2}.Bravo!1 HTML1 / HTML2 at xeroxparcarchive.computerhistory.org
[Schmidt1982b]
Eric Emerson Schmidt. Controlling Large Software Development In a Distributed Environment. PhD thesis, University of California, Berkeley, 1982. Also published as Report CSL-82-7, Palo Alto Research Center, Xerox Corporation. PDF at bitsavers.org

The Cedar system

The Cedar language design and implementation was fairly far along by the end of 1981, but the work of producing a new programming environment to take advantage of the language was a larger project involving a number of people for several more years.

Jim Morris had agreed to manage the overall Cedar project:

In 1979 a large, distributed design effort was begun on many different topics: user facilities, display packages, language changes, communications, management of large programs, filing, etc. This effort was coordinated by a steering committee consisting of Peter Deutsch, Jim Horning, and Butler Lampson, and involved a substantial fraction of the laboratory. An external design review was held in September. The organization of the implementation efforts began in the late summer of 1979 and the programming of certain things started in the Fall." [Morris1980]

Ib February 1981 a project review was carried out [Ayers1981].

Jim Morris. Cedar Status. 19 February 1981. [_CD8_]>cedardocs>status.memo!2

R. Ayers, F. Baskett, P. Deutsch, C. Geschke, J. Warnock, J. Wick, J. Morris (editor). Internal Review of Cedar. 19 February 1981. [_CD8_]>cedardocs>review.memo!4

Cedar, like Mesa before it, was implemented using a specialized virtual machine implemented in microcode and ran on the Dorado and the Dandelion (a machine used for the Xerox Star system). By the late 1980s these D-machines were being outrun by commercial workstations, and it was decided to rewrite Cedar into a form easily ported across architectures. The Mimosa project [Atkinson1989] rewrote the compiler using machine-dependent C as the intermediate language, developed a language-independent Portable Common Runtime [Weiser1989], and finally wrote a large subset of the Cedar-specific runtime in a subset of the Cedar language.

Remote procedure call

Remote procedure call extends familiar synchronous procedure calls to span address space and machine boundaries. A program transformation tool ([Nelson1982]) transforms an interface (Mesa DEFINITION module) into client-side and server-side stubs which are linked with a runtime module that handles retransmissions, acknowledgements, packet routing, and encryption [Birrell1983]. [Nelson1981] explores many design possibilities and includes references describing much of the previous work.

Portable Cedar

***** [Weiser1989], [Li1992], [Hauser1993], ...

Papers and reports

[Atkinson1989]
R. Atkinson, A. Demers, C. Hauser, C. Jacobi, P. Kessler, and M. Weiser. Experiences creating a portable Cedar. In Proceedings of the ACM SIGPLAN 1989 conference on Programming Language Design and Implementation (PLDI '89). Association for Computing Machinery, New York, 1989, pages 322–329. ACM Digital Library
[Birrell1983]
Andrew D. Birrell and Bruce Jay Nelson. Implementing Remote Procedure Calls. Report CSL-83-7, Palo Alto Research Center, Xerox Corporation, December 1983. PDF at bitsavers.org Also published in: ACM Trans. Comput. Syst., Volume 2, Number 1, February 1984, pages 39–59. ACM Digital Library
[Boehm1994]
Hans-J. Boehm, Russ Atkinson and Michael Plass. Ropes Are Better Than Strings. Report CSL-94-10, Palo Alto Research Center, Xerox Corporation, September 1994. PDF at bitsavers.org
[Brown1984]
M. Brown, K. Kolling. and E. Taft. The Alpine File System, Xerox Palo Alto Research Center Report CSL-84-4, Oct. 1984. PDF at bitsavers.org Also published in: ACM Trans. Comput. Syst. Volume 3, Number 4, Nov. 1985, pages 261–293. ACM Digital Library
[Donahue1985]
James Donahue. Integration mechanisms in Cedar. In Proceedings of the ACM SIGPLAN 85 Symposium on Language Issues in Programming Environments (SLIPE '85). Association for Computing Machinery, New York, 1985, pages 245–251. ACM Digital Library
[Hauser1993]
C. Hauser, C. Jacobi, M. Theimer, B. Welch, and M. Weiser. Using Threads in Interactive Systems: A Case Study. Report CSL-93-16, Palo Alto Research Center, Xerox Corporation. This report was accompanied by a CD-ROM containing a Cedar system that can be run under SunOS. Source code is included for much of the system. PDF
[Li1992]
Raymond T. Li. C—Cedar/Mesa Interoperability, Version 1.0. Advanced Technology & Competency Development, Xerox Corporation, 7 August 1992. PDF at bitsavers.org
[Morris1980]
Jim Morris. The Cedar Project. 31 March 1980. PDF (in [EPEWG])
[Nelson1981]
Bruce Jay Nelson. Remote Procedure Call. PhD thesis, Stanford University, 1981. Also published as Report CSL-81-9, Palo Alto Research Center, Xerox Corporation, May 1981. PDF at bitsavers.org
[Nelson1982]
Bruce Nelson and Andrew Birrell. Lupine User's Guide: An Introduction to Remote Procedure Calls in Cedar. Palo Alto Research Center, Xerox Corporation, 8 July 1982. PDF
[Swinehart1985]
Daniel C. Swinehart, Polle T. Zellweger, and Robert B. Hagmann. 1985. The Structure of Cedar. In Proceedings of the ACM SIGPLAN 85 Symposium on Language Issues in Programming Environments (SLIPE '85). Association for Computing Machinery, New York, 1985,pages 230–244. ACM Digital Library
[Swinehart1986]
Daniel C. Swinehart, Polle T. Zellweger, Richard J. Beach, and Robert B. Hagmann. A structural view of the Cedar programming environment. ACM Trans. Program. Lang. Syst. Volume 8, Number 4, Oct. 1986, pages 419–490. ACM Digital Library
[Teitelman1984]
Warren Teitelman. The Cedar programming environment: A midterm report and examination. Report CSL-83-11, Palo Alto Research Center, Xerox Corporation, June 1984. Contains "The Roots of Cedar," "A Tour through Cedar," and "Cedar: The Report Card." PDF
A condensed version of "A Tour through Cedar" appeared in: Proceedings of the 7th International Conference on Software Engineering (ICSE '84). IEEE Press, 1984, pages 181–195. ACM Digital Library
[Weiser1989]
M. Weiser, A. Demers, and C. Hauser. The portable common runtime approach to interoperability. In Proceedings of the Twelfth ACM Symposium on Operating Systems Principles (SOSP '89). Association for Computing Machinery, New York, 1989, pages 114–122. ACM Digital Library

Source code and documentation

See Appendix B of [Swinehart1986] for table of releases from 1 to 6.0.

Cedar 4.0

"No Copilot dependencies, Abstract Machine, world-swap debugging, performance improvements, Alpine transaction file server introduced" [Swinehart1986, Appendix B]

Cedar 4.1

Cedar 4.2

Cedar 4.4

Cedar 5.0

"Cedar off Pilot base, FS, VM, Safe Storage, IO, four major layers: Machine, Nucleus, Life Support, Applications" [Swinehart1986, Appendix B]

Cedar 5.3

Cedar 6.0

"The current version of Cedar (Cedar 6.0) occupies more than 17 million bytes of disk storage and contains over 1,500 source files, more than 400,000 lines of source code, approximately 150 DF files, and over 100 configurations." [Swinehart1986]

A major change was the replacement of the Cedar Graphics package by the Imager. See [Swinehart1986, section 9.1].

Cedar 6.1

Cedar 7.0

*****

Portable Cedar

Applications written in Cedar

The Cedar language was used for many additional research projects running on the Dorado and other "D-machines."

***** Add more Cedar papers and reports, for example from here: https://xeroxparcarchive.computerhistory.org/Xerox_PARC_source_code.html#Cedar/Mesa

Brad Myers: Incense https://bitsavers.org/pdf/xerox/parc/techReports/CSL-80-7_Displaying_Data_Structures_for_Interactive_Debugging_198006.pdf

Alpine database

Tioga document editor

Griffin illustration program

Walnut email client

Eric Bier?

***** See https://github.com/rochus-keller/Cedar

Other resources

***** Add Josh Dersch's Mesa emulator?

Acknowledgments

***** Move this to the front, and provide abbreviations for each archive, for use in link anchors

***** Add xeroxparcarchive.computerhistory.org and bitsavers.org as archives

Thanks to Ed Satterthwaite for his recollections of MPL, Mesa, and Cedar, Al Kossow for bitsavers.org, and Charles Irby for donating his papers:

Charles H. Irby Papers, 1962–1975, Stanford Libraries Special Collections, M0671. Finding aid at Online Archive of California