Computer History Museum
AI-assisted summary of Eric Bier Demonstrates Cedar — original source. Check the original for full context.
Source published:
Key ideas
- Cedar evolved from Mesa at Xerox PARC to combine an industrial-strength, strongly typed modular programming language with an automated garbage collection engine and an integrated operating environment. (2:57)
- The Tioga text editor served as a universal interaction substrate across Cedar, allowing embedded typography, mathematical symbols, and vector graphics inside source code without interfering with compiler execution. (26:53)
- Cedar packages relied on Description Files (DF files) for dependency management and automated linking, enabling tools like BringOver to populate workspaces across remote file servers transparently. (67:34)
- Xerox Dorado workstations featured microcode-driven hardware cursors that continued tracking mouse movement and flashed numeric diagnostic codes even during fatal operating system freezes. (113:04)
Detailed notes
## Background Published on YouTube by the Computer History Museum on April 17, 2019, this archival demonstration features Xerox PARC research scientist Eric Bier showcasing the Cedar integrated programming environment and language recorded on January 24, 2019. The session illustrates Cedar's evolution from Mesa on Xerox D-machines like the Dorado to Sun workstations, highlighting its tiled window manager, universal Tioga text editor, package management, and the Gargoyle graphics suite.
## TL;DR In this technical demonstration and panel discussion, Eric Bier, joined by former PARC colleagues Chris Jacobi, Paul McJones, and Nicholas Briggs, demonstrates the live Cedar environment hosted on a Sun workstation via remote X11. Bier walks through the innovative two-column Viewers window manager, chorded three-button mouse commands, and the Tioga editor, which embedded rich text formatting, styles, and interactive graphics directly into compilable source code. The presentation explores the Gargoyle vector illustration system and its snap-dragging mechanics, Cedar's modular DF package management infrastructure, and the underlying language architecture, including closures, multiple return values, reflection via REF ANY, and pervasive multithreading.
## Atmosphere & style The session has the warm, intimate, and deeply nostalgic atmosphere of a reunion among veteran computer scientists marveling at tools they built and mastered decades prior. Bier's live demonstration is casual yet authoritative, punctuated by chuckles, shared in-jokes like the 'Let's Do the Roll Back Again' song, and spontaneous technical commentary from Jacobi and Briggs. Watching it feels like peering over the shoulder of systems pioneers who remain genuinely fond of Cedar's ergonomic speed, laughing about enduring muscle memory while contrasting its cohesive elegance with the quirks of modern computing.
## Bulletin - [02:57](https://www.youtube.com/watch?v=z_dt7NG38V4&t=177s) Cedar evolved from Mesa at Xerox PARC to combine an industrial-strength, strongly typed modular programming language with an automated garbage collection engine and an integrated operating environment. - [26:53](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1613s) The Tioga text editor served as a universal interaction substrate across Cedar, allowing embedded typography, mathematical symbols, and vector graphics inside source code without interfering with compiler execution. - [01:07:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4054s) Cedar packages relied on Description Files (DF files) for dependency management and automated linking, enabling tools like BringOver to populate workspaces across remote file servers transparently. - [01:53:04](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6784s) Xerox Dorado workstations featured microcode-driven hardware cursors that continued tracking mouse movement and flashed numeric diagnostic codes even during fatal operating system freezes.
## Key takeaways - [06:49](https://www.youtube.com/watch?v=z_dt7NG38V4&t=409s) Cedar prioritized strong typing and strict separation between interface definitions and underlying implementations, fostering high code reuse and robust compiled binaries across PARC. - [08:33](https://www.youtube.com/watch?v=z_dt7NG38V4&t=513s) Automated garbage collection was the definitive architectural upgrade that transformed Mesa into Cedar on second-generation D-machines like the Dorado. - [13:37](https://www.youtube.com/watch?v=z_dt7NG38V4&t=817s) PARC launched the Experimental Programming Environment (EPE) project to evaluate Mesa, Smalltalk, and Interlisp, ultimately seeing Cedar emerge as the dominant internal development platform. - [14:35](https://www.youtube.com/watch?v=z_dt7NG38V4&t=875s) The Viewers window manager utilized a lightweight, two-column tiling model with custom icon trays and persistent layout restoration. - [20:05](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1205s) Cedar placed scrollbars on the left margin to minimize cursor travel from left-aligned text, integrating hierarchical outline collapsing via Ctrl and Shift modifiers. - [23:54](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1434s) Combining three mouse buttons with Ctrl and Shift modifiers provided twelve instant operations per context, including point-and-shoot text copying without focus shifting. - [47:54](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2874s) Tioga files maintained a dual-representation architecture where an ASCII null boundary separated compiler-visible plain text from post-null rich formatting and embedded vector artwork. - [58:58](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3538s) The Gargoyle 2D graphics editor introduced snap-dragging techniques based on geometric ruler-and-compass constructions, embedding vector graphics directly into Tioga documents. - [01:01:43](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3703s) Gargoyle operated on a 'documents as user interfaces' paradigm, constructing its own menus as clickable drawings that supported multi-button mouse accelerators. - [01:07:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4054s) Description Files (DF files) automated remote dependency resolution and compilation workflows via BringOver, bypassing manual linker configurations. - [01:20:42](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4842s) Tioga unified hierarchical structural nesting inspired by Doug Engelbart's NLS with Smalltalk's ubiquitous user interface principles on 1-megabyte Dorado workstations. - [01:37:01](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5821s) Cedar language semantics natively supported multiple return values, explicit integer subranges, and custom array index bounds. - [01:40:21](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6021s) Porting Cedar to Sun workstations required replacing proprietary Alto keyboard assignments, such as the left-arrow assignment symbol, with standard characters like ':='. - [01:43:15](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6195s) Rather than relying on formal class keywords, Cedar achieved object-oriented patterns and multithreading through first-class function variables, closures, and Mesa monitor primitives. - [01:45:36](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6336s) Runtime reflection and polymorphic data handling were implemented via the universal pointer type REF ANY in place of parameterized generics. - [01:53:04](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6784s) Cedar incorporated session-checkpointing mechanisms that allowed engineers to suspend execution, write complete memory states to disk, and roll back running environments.
## Detailed walkthrough ### [00:10](https://www.youtube.com/watch?v=z_dt7NG38V4&t=10s) Eric Bier’s Background and First Encounters with Cedar
On January 24, 2019, Hansen Hsu convenes a session with PARC research scientist Eric Bier to discuss and demonstrate the Cedar integrated environment and programming language. Bier begins by recalling that he first encountered Cedar in 1981, during his second summer working as an intern at Xerox PARC. That summer, he worked with his host Rick Cattell building databases, and Cattell insisted they be implemented within the Cedar programming environment. Bier participated in MIT’s 6-A co-op program, which entailed working three summers and one fall at a host company and then writing a master’s thesis based on the final six months of effort.
During his third summer at PARC, Bier's host was John Warnock within the Imaging Sciences Laboratory, managed at the time by Chuck Geschke. There, Bier developed a 3D solid modeling system dubbed "Solidviews," which ultimately formed the basis of his MIT master's thesis. He operated Cedar primarily on the Xerox Dorado—a high-performance machine commemorated at the Computer History Museum. Dorado machines were scarce at the time, requiring engineers to sign up for scheduled time slots.
Bier vividly recalls taking a shuttle bus from his office down on Hanover Street up to the main PARC facility at 3333 Coyote Hill Road just to claim a one-hour reservation on a Dorado. During an earlier summer using Smalltalk, his first experience on the machine left an indelible impression: “And what I remember was almost laughing out loud because I wasn't waiting for the computer, it was waiting for me.” Dorados achieved their extreme speed by utilizing emitter-coupled logic (ECL). Because ECL ran intensely hot, machines were not kept directly in individual offices; instead, they were installed down the hall in a dedicated air-conditioned computer room, connected to desk displays and peripherals by thick trunks of cabling routed through the ceilings.
[02:57](https://www.youtube.com/watch?v=z_dt7NG38V4&t=177s) Cedar as a Universal Environment for Code Reuse
Bier highlights a defining attribute of Cedar: it was conceived from the ground up as an environment for both technical researchers and administrative support staff, serving simultaneously as a software engineering platform and a publishing engine. Screen examples show formatted documents embedding inline illustrations and styled typography alongside code. In Cedar, researchers, administrative assistants, and artists shared the same underlying tools.
When asked to characterize Cedar for those unfamiliar with it, Bier explains that it encompasses both the language (often referred to as Cedar Mesa) and an expansive ecosystem of shared runtime libraries and tools. In the 1980s, the team routinely summarized it to outsiders as an "industrial-strength Pascal" to convey a general feel for its syntax. Crucially, the system enforced strict packaging and interface definitions, sparking an extraordinary culture of shared code across dozens of colleagues who built atop one another’s work.
```mermaid flowchart TD accTitle: Cedar Modular Architecture and Application Ecosystem accDescr: Diagram illustrating how the core Cedar language and libraries feed into diverse modular user applications. subgraph Core ["Cedar Platform Core"] A["Cedar Mesa Language<br/>(Strong typing, Pascal-like syntax)"] B["Runtime & Libraries<br/>(Interfaces vs. Implementations, GC)"] A --- B end
subgraph Applications ["Application Ecosystem"] C["Document Processing<br/>& Tioga Editor"] D["2D / 3D Graphics<br/>(Solidviews, Gargoyle)"] E["VLSI Circuit<br/>Design Tools"] F["Database & Networking<br/>Infrastructure"] G["Email Clients &<br/>Interactive Debuggers"] end
Core --> Applications ```
The modular discipline meant developers frequently extended or patched software authored by their peers. As Bier explains: “And because it was fairly close-knit community and because of the way the programming environment itself worked, you could constantly be building on other people's software, and even sometimes you would discover a bug in someone else's software and rather than bother them with it, you would just fix it.” If a bug proved intractable, ownership was so transparent that a fix could be arranged with the original author immediately. PARC funded this massive effort because leadership believed that maintaining an extraordinarily productive, state-of-the-art programming platform was the only way to remain at the cutting edge of computer science research.
- Applications built directly within Cedar included email readers, comprehensive debugging utilities, 2D and 3D graphics suites, document publication processors, database engines, networking protocols, and VLSI circuit layout tools. - Strongly typed language boundaries cleanly separated external interfaces (`.bcd` / interface files) from underlying implementations, allowing modular compilation and transparent linkage.
[06:49](https://www.youtube.com/watch?v=z_dt7NG38V4&t=409s) Comparing Cedar, Smalltalk, and Interlisp
Hsu asks how Cedar compared to PARC's other two prominent programming environments of the era: Smalltalk and Interlisp. Bier points out that the three systems represented radically different philosophical choices and execution paradigms. Smalltalk was deeply dynamic and interactive, allowing a developer to type a snippet of code directly into an on-screen window and execute it immediately in an interpreted loop. Interlisp offered extreme structural flexibility through Lisp's uniform syntax, enabling programs to generate, inspect, and immediately execute code on the fly—making it the tool of choice for PARC’s artificial intelligence community.
In contrast, Cedar focused on building hardened, large-scale systems. Its hallmark was strong typing coupled with the strict decoupling of public interfaces from concrete implementations: “What Cedar was really strong at was a strongly typed language with separation between interfaces and implementations, which meant as I said that it was tremendously good at allowing code reuse, and the code that you produced was, you know, fairly robust and likely to, you know, if it compiled it was probably going to run.” This made Cedar ideal for constructing complex applications that could transition into production-grade, commercial products.
[08:33](https://www.youtube.com/watch?v=z_dt7NG38V4&t=513s) Hardware Evolution: Alto, Dolphin, and Dorado
Bier traces his early computing hardware progression through PARC's internal workstations. During his first summer, he was assigned an original Xerox Alto. At the adjacent desk, Andy Daniels was equipped with a Xerox Dolphin—a newer, microcoded processor running roughly 1.5 to 2 times faster than the Alto. Whenever Daniels stepped out of the office, he would generously offer his Dolphin to Bier to speed up work.
Both machines were ultimately eclipsed by the Dorado, which Bier describes as operating at roughly one MIPS (million instructions per second). Although one MIPS sounds modest by modern standards, Bier clarifies that these were rich, microcoded instructions capable of executing substantial computational work per instruction cycle rather than simple clock ticks. Dorado hardware memory configurations varied; the reservation signup sheets noted the memory capacity of each physical box in the machine room. Most Dorados offered 768 kilobytes of RAM, but if an engineer arrived early or was fortunate on the sheet, they could claim the prized "big Dorado" equipped with a full megabyte.
Regarding operating support across hardware generations, Bier notes that while Mesa ran on the Dolphin, he does not believe Cedar ever ran on the Alto, and he doubts whether full Cedar ever ran on the Dolphin either. Mesa was famously chosen as the systems implementation language for Xerox's commercial workstation products, including the Xerox Star (8010 Information System). Bier remembers a celebratory patio party at PARC in the summer of 1980 marking the Star's rollout. However, base Mesa lacked modern developer conveniences: it lacked automatic garbage collection, forcing programmers to explicitly manage pointer lifecycles and storage allocation. Adding automated garbage collection represented the major evolutionary milestone separating Cedar from legacy Mesa.
[11:44](https://www.youtube.com/watch?v=z_dt7NG38V4&t=704s) Panel Introductions and the Origins of Cedar Mesa
Hsu introduces three additional PARC alumni in the room who contributed directly to Cedar and related systems: Paul McJones, Chris Jacobi, and Nicholas Briggs. Each shares their operational background with Xerox software engineering:
- **Paul McJones** worked across the street at Xerox SDD (Systems Development Division) from 1976 through 1981 on the Star office automation system and the Pilot operating system, which later functioned as the foundational low-level platform for Cedar. - **Chris Jacobi** joined PARC in 1983 as an early user of Cedar, authoring an enormous VLSI design tool before shifting to Cedar development itself, where he authored portions of the Cedar compiler and its graphical window system. - **Nicholas Briggs** arrived at PARC in 1984, initially working on the Interlisp environment before transitioning to Cedar to leverage its imaging subsystem for document printing architectures.
Reflecting on the origin of Cedar Mesa, McJones adds that throughout the mid-to-late 1970s, teams were quite satisfied building commercial software in standard Mesa. Because physical memory was so constrained, programmers had to carefully track and allocate every individual byte. Around that time, intense debates erupted across the street at PARC regarding the architectural direction of their next-generation systems, setting the stage for the Cedar experiment.
[13:37](https://www.youtube.com/watch?v=z_dt7NG38V4&t=817s) The Experimental Programming Environment Project and the Origins of Cedar
The push toward Cedar emerged from Xerox PARC's desire to consolidate its fragmented software landscape. While researchers across the laboratory were collaborating and sharing packages, they remained divided across three distinct programming environments: Mesa, Smalltalk, and Interlisp. To address this divide, PARC launched the Experimental Programming Environment (EPE) research project. Its mandate was to evaluate all three environments and determine whether a single language could be selected or synthesized to become the standard PARC programming language.
```mermaid flowchart TD accTitle: Language Convergence into Cedar accDescr: Three original PARC environments converge through the Experimental Programming Environment project into Cedar/Mesa. subgraph S1["Original PARC Environments"] M["Mesa\n(Modular & Strongly Typed)"] ST["Smalltalk\n(Object-Oriented)"] IL["Interlisp\n(Dynamic & Interactive)"] end EPE["Experimental Programming\nEnvironment (EPE) Project"] C["Cedar / Cedar Mesa\n(Dominant by the 1980s)"]
M --> EPE ST --> EPE IL --> EPE EPE --> C ```
Out of this initiative emerged Cedar Mesa, which grew to play a dominant role across PARC by the 1980s. However, the consolidation was not entirely harmonious. While Smalltalk and Interlisp practitioners contributed core ideas and capabilities to Cedar's design, they remained skeptical of adopting it wholesale. As one participant reflects on the internal politics of the project:
> “And yet I think the people from Smalltalk and Interlisp felt not exactly railroaded, you know, they definitely contributed a bunch of ideas to what went into Cedar, but they weren't convinced that that was going to replace their their own language.”
- **Participating languages:** Mesa, Smalltalk, Interlisp. - **Formal initiative:** The Experimental Programming Environment (EPE) research project. - **Resulting system:** Cedar Mesa became dominant at PARC during the 1980s, though researchers from the Smalltalk and Interlisp camps continued to defend and maintain their own platforms.
---
[14:35](https://www.youtube.com/watch?v=z_dt7NG38V4&t=875s) Demo Setup and the Viewers Tiling Window System
Demonstrating Cedar in the 1980s would have meant sitting directly in front of a Xerox Dorado with a high-resolution monochrome display. For this 2019 presentation at the Computer History Museum, Eric Bier reconstructs the environment using a MacBook Pro running X11/X Windows, connected over a secure VPN to a Sun Microsystems workstation at PARC running Cedar on top of Solaris.
Bier explains that Cedar underwent multiple window system iterations. Warren Teitelman originally developed a rich window manager called Docs, but it proved somewhat heavy and slow in practice. In response, Scott McGregor designed "Viewers"—a lean, fast, and highly responsive window manager that defined the canonical Cedar interface. The screen layout is strictly organized:
```mermaid flowchart TD accTitle: Cedar Viewers Screen Layout accDescr: Structural organization of the Cedar Viewers screen from the top status bar down to the bottom icon tray. Top["Top Bar: System Status & Launcher Buttons ('Command', 'New')"] subgraph Columns["Two-Column Tiling Area"] LeftCol["Left Column Viewers\n(Scrollbars on Left)"] Divider["Adjustable Split Line"] RightCol["Right Column Viewers\n(Scrollbars on Left)"] LeftCol --- Divider --- RightCol end Bottom["Bottom Screen Area: Application Icons (Patterned & Color-Coded)"]
Top --> Columns Columns --> Bottom ```
At the top of the display sits a global status bar featuring utility buttons. Clicking `command` spawns a terminal viewer known as the Commander, while clicking `new` creates a blank text viewer running the Tioga editor.
Unlike modern overlapping window managers where windows layer arbitrarily on top of each other, Viewers enforces a strict two-column tiling model. Viewers placed in either column can be repositioned horizontally or vertically: - An arrow button shuffles a viewer into the adjacent column. - The vertical boundary dividing the left and right columns can be grabbed and dragged to rebalance column widths. - A viewer can be expanded to fill its entire column using the `grow` button, which temporarily pushes every other viewer in that column down into the bottom icon tray. - If that maximized viewer is subsequently closed or destroyed, Cedar's window manager remembers the prior layout state and automatically restores the previously displaced windows. - Users can customize menus and default tool layouts through configuration files, and viewers can be stripped down to minimize chrome and maximize visible text. - Minimized viewers collapse into icons lined along the bottom border of the screen, where distinct bitmap textures and later-added color palettes identify the underlying application. Cedar even supplied an "icon editor" tool so users could design and edit their desktop icons one pixel at a time.
---
[20:05](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1205s) The Left-Hand Scrollbar and Structured Tioga Navigation
Bier highlights a distinct ergonomic feature that he and Chris Jacobi still miss in modern graphical systems: Cedar's placement of scrollbars on the extreme left margin of viewers rather than the right. Bier explains that in both text editing and software development, code and prose are naturally left-aligned, leaving the right side of the window filled with ragged whitespace. Because the user's cursor is constantly hovering over text near the left margin, reaching the scrollbar requires only a tiny, effortless gesture rather than a long sweep across the display to the far right.
Furthermore, the Tioga scrollbar acts as a rich control panel rather than a simple slider: - **Instant positioning:** A single click instantly moves the selected line of text directly to the very top of the window, eliminating continuous, imprecise dragging. - **Middle-button "thumbing":** Clicking the middle mouse button transforms the cursor into an arrow, instantly jumping directly to that proportional location in the document (e.g., three-quarters down the file). - **Outlining and level control:** Tioga documents and source code are hierarchically structured by indentation levels. While top-level menus allow collapsing the text to a coarse outline view or expanding it back out, these operations are integrated directly into the scrollbar via modifier chords: - Holding `Ctrl + Shift` while clicking collapses all subordinate levels into an outline view. - Holding `Ctrl` while clicking expands the structure back to full detail, simultaneously aligning the clicked line to the top of the viewer.
Bier demonstrates this flexibility on a draft of a conference paper: with one chorded click, the manuscript collapses into a clean table of contents; another click on "Section 5" expands only that section while instantly scrolling it into view. These combined shortcuts allow experienced users to navigate long documents and complex source files with immense speed.
---
[23:54](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1434s) Mouse-Chord Combinations and Multi-Window Programming
A defining element of the Cedar user interface is its reliance on mouse chording across a three-button mouse. Rather than hiding functionality inside nested menus, Cedar mapped deep command sets directly onto physical button combinations. Combining the left, middle, and right mouse buttons with the `Ctrl` and `Shift` keyboard modifiers yielded an immediate palette of twelve independent operations available from any cursor position. As Bier points out, the entire system is architected around this input paradigm:
> “So with Ctrl and Shift, that gave you four combinations plus three mouse buttons basically gave you 12 commands in any given context that you could trigger just with those keys and and the mouse buttons, and Cedar made a lot of use of that as you'll see as we go along.”
This input efficiency supported an exceptionally fluid programming workflow: - **Screen density:** Cedar paired high display resolutions with small, crisp, legible proportional and bitmap fonts. Because the text and window frames were compact, developers routinely kept three, four, or more source code modules tiled side-by-side simultaneously without running out of screen real estate. - **Cross-module refactoring:** Bier illustrates this by tiling three modules at once within the two-column view, demonstrating how an engineer could effortlessly extract logic across disparate files. Text chunks could be selected in one viewer and pulled directly into another module with minimal mouse movement. - **Advanced retrieval commands:** To support rapid cross-viewer work, Cedar featured specialized search and navigation commands such as `OpenR` and `FindR`, setting up rapid cross-module search and cross-buffer text manipulation.
[26:53](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1613s) Release Commands and the Everywhere Nature of the Tioga Editor
Eric Bier explains the release-oriented commands in Cedar, focusing on how `find` and `open` work when combined with an `r` suffix. While regular commands search the local working environment, adding `r` instructs Cedar to search the official release directories stored on remote file servers. Executing `FindR` with a pattern matching `.df` files queries the system's package registry: Cedar takes a path starting with `cedar13.0`, maps it via an internal directory service to a physical file server, and locates all matching DF (Description File) packages inside a central subdirectory named `Top`.
```mermaid flowchart LR accTitle: Cedar Release Lookup Architecture accDescr: Flow showing how release commands query remote package directories and open files directly in Tioga. subgraph Client["Local Cedar Environment"] Cmd["Command Line<br/>('FindR' / 'OpenR')"] TiogaUI["Tioga Editor Window"] end subgraph Resolver["Cedar Path Resolver"] Map["Cedar 13.0 Path Mapping"] end subgraph Storage["File Server"] Top["/cedar13.0/Top/"] DF["*.df (Package Files)"] Doc["*.doc (Documentation)"] end Cmd --> Map Map --> Top Top --> DF Top --> Doc Doc -.->|"OpenR"| TiogaUI ```
The companion command `OpenR` retrieves the matched file directly from the release repository and opens it immediately within Tioga, Cedar’s native structured text editor. Because Cedar packaging standardizes on `.doc` as the file extension for package manuals, running `OpenR Tioga.doc` automatically pulls and displays the official documentation for the editor itself without requiring the user to know the remote storage topology.
Bier emphasizes that Tioga is not simply a standalone word processor; it is architectural infrastructure integrated across the entire Cedar operating system. Unlike modern terminal applications that provide only rudimentary, line-oriented editing buffers, Cedar embeds the complete Tioga engine into every text interface, including standard command line terminals and dialog input boxes. Users can apply full Tioga keystrokes, select text across separate windows, and even manipulate inline character looks directly within a running command tool. To prove the point, Bier selects text in the middle of a command prompt and formats it as bold type, noting: “Tioga is really important in Cedar because it's everywhere.”
- Cedar release commands append an `R` (such as `FindR` or `OpenR`) to target system-wide release trees rather than the current working directory. - Release directories contain a `Top` folder housing all system `.df` (Description File) package configurations. - Package documentation uniformly adheres to the `.doc` file extension convention across all Cedar distributions. - Tioga windows maximize screen utility by combining file path display labels and action buttons into a single, compact header bar. - The command terminal provides full Tioga capabilities, supporting rich text styling, font changes, and structural selection inside console prompts.
---
[30:44](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1844s) The Edit Tool: Search, Replace, Looks, and Stylesheets
To complement the editor, Cedar provides the **Edit Tool**, a persistent utility window designed to operate universally on whatever window currently holds the selection. Rather than spawning a separate search-and-replace dialog inside every text window, Cedar uses a single, screen-wide Edit Tool that targets whichever document the user is working on. It allows searches not only by character string, but also by typographical looks, style tags, and structural properties.
After adjusting the parameters in the tool, Bier demonstrates how it can locate literal text (such as the term `memos`) or hunt strictly for character properties by querying the document for any run of text flagged with the bold attribute. It can also perform combined operations, simultaneous replacing text while mutating its styling:
```mermaid flowchart TD accTitle: Unified Edit Tool Workflow accDescr: Diagram illustrating how the centralized Edit Tool controls any open document buffer using looks, text, and styles. ET["Centralized Edit Tool Window"] DocA["Document Window A<br/>(Tioga File)"] DocB["Document Window B<br/>(Terminal / Buffer)"] ET -->|"Search/Replace Text"| DocA ET -->|"Filter by 'Looks' (Bold, Italic)"| DocA ET -->|"Apply Macro Replay"| DocB ET -->|"Inspect Cascading Style Sheets"| DocA ```
When inspecting bold text within a sample conference paper, Bier highlights Cedar's dual approach to styling: 1. **Explicit Looks:** Characters directly tagged with an inline property code, such as `b` for bold. 2. **Cascading Style Sheets:** Structural markup where elements inherit presentation from defined style rules without hardcoded attributes.
Examining a section header reveals no hardcoded bold attribute. Instead, the Edit Tool inspector indicates the paragraph is governed by an underlying cascading stylesheet named `chi2columnreduced` (built for submissions to the ACM SIGCHI Computer-Human Interaction conference), where the node is assigned structural level `head1`.
Beyond property matching, the Edit Tool features command recording and macros. Bier demonstrates how typing a series of actions—navigating behind a word, applying a bold look, and typing additional punctuation—can be instantly replayed across any other target text with a single keystroke. When an edit goes wrong, Cedar offers rapid recovery: pressing `Shift+Escape` issues a one-level Undo across Cedar tools, while clicking the `Reset` button discards all unsaved modifications and reverts the buffer to the clean state stored on disk.
---
[35:03](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2103s) Structural Repeat Macros and Contextual Button Actions
Cedar provides built-in macro replay directly in the base text editor, operating independently of whether the auxiliary Edit Tool window is visible on screen. When an author executes an editing sequence on a text element—such as changing its look to italic, adding punctuation, and appending a numeric string—Tioga silently tracks the full sequence of actions executed since the selection was initialized. By making a fresh selection elsewhere on the screen and pressing the `Escape` key, the editor automatically applies the entire recorded mutation to the newly targeted text. As Bier notes: “You would often find as you were using the Tioga text editor that you wanted to do something over and over again and often it would do just what you were hope what you would hope it would do.”
This design highlights a core Cedar paradigm: commands frequently expect an active text selection somewhere on screen before a user clicks an action button. To illustrate:
1. A Tioga window exposes knowledge of its local directory context (e.g., the `TiogaFiles` folder). 2. The user highlights an arbitrary file name string appearing inside the directory listing or within any open document buffer. 3. Clicking the `Get` button loads that selected file directly into the active editing pane. 4. Clicking the `Prev` (Previous) button instantly restores the previous buffer contents without requiring manual navigation or file picker dialogs.
While Bier acknowledges that this selection-first pattern proved divisive—admitting that “one thing about Cedar, some people liked it, some people didn't, was that a lot of the commands required that you make a text selection before you did them”—it dramatically accelerated routine editing workflows by turning any arbitrary piece of text on screen into functional input for application buttons.
---
[38:27](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2307s) The Cedar Mousing Model: Point-and-Shoot Copy and Node Selection
Nick Briggs asks Bier to detail the operational differences between the standard desktop interaction model and the Cedar mousing model, specifically prompting: “Eric, can you say something about the different mousing model, the insertion point and Shift-select, copy-selects, those operations that are quite different from what we usually encounter today?”
Bier contrasts mainstream desktop computing with Cedar's accelerated mechanics. In modern operating systems, copying requires a disjointed series of steps: highlight the source, trigger a copy command, reposition the cursor elsewhere, and trigger paste. Cedar bypasses this context switching entirely through **Point-and-Shoot Copy**:
> “In Cedar there is a more efficient method, and it's it's enough more efficient that I continue to use Cedar deep into the 1990s just so as not to have to give give that up along with some other features, but that was a big one.” — Eric Bier
To execute a copy in Cedar: 1. The insertion cursor (caret) remains anchored in the active document where work is currently taking place. 2. The user spots the desired text anywhere else on the display screen. 3. Holding the `Shift` key signals the system that mouse clicks should act as a copy source. 4. Clicking the target text instantly duplicates that text directly into the primary caret position without moving the caret or altering the original window's focus.
```mermaid flowchart TD accTitle: Mouse Button Selection Granularity accDescr: Hierarchy of mouse clicks in Cedar mapping from characters to trees of nodes. subgraph SingleClicks["Single Clicks"] Left["Left Mouse Button<br/>Select Character"] Middle["Middle Mouse Button<br/>Select Word"] Right["Right Mouse Button<br/>Extend Selection (Current Level)"] end subgraph DoubleClicks["Double Clicks"] DLeft["Double Left Click<br/>Select Node / Line"] DMiddle["Double Middle Click<br/>Select Entire Branch / Subtree"] DRight["Right Click (Post-Double)<br/>Extend Selection by Node / Tree Level"] end Left -->|"Right Click"| Right Middle -->|"Right Click"| Right DLeft -->|"Right Click"| DRight DMiddle -->|"Right Click"| DRight ```
This interaction is driven by Cedar's three-button mouse mapping: - **Left Mouse Button:** Selects a single character anywhere on screen. - **Middle Mouse Button:** Selects an entire word. - **Right Mouse Button:** Extends the selection boundary outward at the active level of granularity (character-by-character if the start was a character, or word-by-word if the start was a word). - **Double Left Click:** Selects an entire structural **node** (which in source code files maps directly to a full line). - **Double Middle Click:** Selects an entire hierarchical branch—meaning the parent node plus all child lines nested underneath it. - **Right Click Following Double Click:** Extends the selection across consecutive lines or complete hierarchical statement blocks (entire functions or routines), allowing developers to move complex program structures across files with a few mouse gestures.
[42:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2554s) Rapid Copying with Shift-Clicks in Tioga
Eric Bier demonstrates the mechanics of moving and copying text using Tioga’s selection paradigm. When the Shift key is held down, the entire repertoire of selection commands—left clicks, middle clicks, right clicks, and double clicks—remains active, but shifts into a copy-paste context. Holding down Shift while double-left-clicking allows a user to instantly pull an entire line of code from elsewhere in the buffer right into the current insertion point.
Because the cursor immediately advances and positions itself to receive the next piece of text, copying becomes an extraordinarily fluid stream of actions. Rather than the traditional sequence of selecting text, copying, moving to the destination, clicking, pasting, and moving back, a programmer can simply hold Shift and click across disparate locations in the file. As Bier puts it, “instead of copy move click paste move back copy and so forth it's shift click shift click shift click and you can really throw text around in a hurry with with that way of doing things.”
- **Shift modifier**: Re-evaluates standard selection clicks (characters, words, lines) as copy-insertion actions directly at the active caret position. - **Continuous cursor positioning**: Keeps the insertion point primed after every copy, allowing chained imports of code lines or phrases from multiple file locations without manual refocusing.
---
[43:37](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2617s) Orthogonal Commands, Muscle Memory, and "Tioga Everywhere"
Chris Jacobi chimes in to highlight a profound architectural quality of the Cedar environment that is difficult to appreciate in a brief visual demo: its strict orthogonality. In Cedar, once an interaction pattern combining keyboard chords, mouse buttons, and double-clicks is learned in one context, that identical pattern works everywhere across the entire system. Jacobi explains that this consistency explains why Bier could seamlessly operate the interface despite a 16-year hiatus, noting: “for me it's 18 years since I haven't used Cedar I still make errors I still use Cedar key combinations sometimes on my PC with the tool which absolutely has no idea what to do for that.”
Jacobi also expands on Bier’s earlier observation that the Tioga editor is ubiquitous throughout Cedar. Every surface displaying text is a full-fledged Tioga instance. If a running program crashes or encounters a fault and prints an error message to the console, the user can immediately execute Tioga commands directly on that error text to edit, select, or modify it. Jacobi jokes about the rare boundary of this design: “I think I know one exception if in a chip design you have some metal with the pattern of letters that doesn't work with Tioga commands.”
- **Strict orthogonality**: Common mouse and keyboard chording rules govern text editing, system tools, file viewers, and consoles without special-case variations. - **Universal text model**: Console outputs, error notifications, and input prompts are interactive Tioga text buffers rather than dumb terminal output streams.
---
[45:50](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2750s) Split Views, Normalization, and Laser Font Previews
Returning to Tioga's interface controls, Bier walks through the window management buttons lining the top of the viewer. Among these is `Split`, an advanced view-splitting feature that allows a programmer to open multiple scrollable viewports into the exact same file simultaneously. This capability allows one to inspect a distant helper function—such as `CopyCircle`—and copy or drag it directly up to the top of the file without losing position. Furthermore, `Split` can be invoked multiple times within a single document viewer, providing simultaneous read/write access to several distinct regions of a large codebase.
Bier also highlights navigation power tools such as `Normalize`, which repositions the current selection nearly to the top of the window, deliberately leaving a few lines above it to preserve visual context. Tioga also maintains a selection history buffer, enabling users to re-select previous text ranges easily. Lastly, Bier toggles the `StyleKind` button, which recalculates the on-screen document typography using proportional laser printer fonts rather than the hand-tuned bitmap screen fonts. Although the laser preview accurately depicts physical print output, Bier quickly switches back to bitmap fonts, noting how much more readable they are on CRT and workstation displays.
- **`Split` viewer**: Multiplies scrollable viewports on a single underlying file buffer to facilitate cross-cutting edits and reference checks. - **`Normalize` command**: Re-scrolls the active selection near the top margin while preserving an overhead buffer of lines for immediate context. - **`StyleKind` switch**: Toggles between screen-optimized bitmap typefaces and hardcopy print simulation fonts.
---
[47:54](https://www.youtube.com/watch?v=z_dt7NG38V4&t=2874s) The Dual-Representation Architecture of Tioga Files
Bier reveals the underlying file format that enables Tioga to function both as an efficient source-code editor and as a rich publication-grade document system. Behind the scenes, a Tioga document is cleanly partitioned into two sections separated by an ASCII null character (`\0`). The first part, preceding the null byte, contains the plain text stream. Everything following the null character consists of binary formatting records that govern character appearances (bold, italics, font families), document hierarchy, and embedded illustrations.
```mermaid flowchart LR accTitle: Tioga File Format Architecture accDescr: Diagram showing how a Tioga document splits plain source text from formatting metadata using a null character boundary. subgraph File["Tioga Document (.mesa)"] direction LR subgraph PreNull["Part 1: Plain Text (Compiler View)"] A["Source Code Stream\n(Keywords, Identifiers, Operators)"] end NullChar["Null Character\n(\\0)"] subgraph PostNull["Part 2: Binary Metadata (Tioga Looks)"] B["Font Looks & Faces\n(Bold, Italics, Greek)"] C["Comments & Annotations"] D["Embedded Illustrations\n(Gargoyle Artwork)"] end A --> NullChar NullChar --> B NullChar --> C NullChar --> D end ```
Crucially, the Cedar and Mesa compilers only read the text prior to the null character, ignoring everything that follows. This means comments, style definitions, and illustrations are stored entirely within the trailing metadata segment rather than within the compiler's lexing stream. In modern IDEs, syntax highlighting is typically computed dynamically on the fly based on grammar heuristics. In Cedar, styling commands are explicit, persistent properties attached to the document. To illustrate, Bier clears all "looks" using the Edit Tool and removes the comment status from a line, converting a stylized `HelloWorld` program back into flat plain text.
- **Null-delimited structure**: The compiler reads source code up to the null byte; rich formatting, artwork, and comments reside after the null byte. - **Zero compiler overhead for comments**: Because comments are stored in the post-null metadata rather than interleaved in the plain text stream, the Mesa compiler never spends cycles scanning or stripping them. - **Explicit formatting commands**: `Ctrl+\` toggles whether a block of text is marked as an ignored comment; `Ctrl+M` automatically parses Cedar Mesa syntax to assign standard typestyles across the document.
---
[51:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3094s) Mathematical Notation and Embedded Illustrations in Source Code
Because styling metadata is decoupled from the raw characters seen by the compiler, developers can apply specialized formatting to enrich code readability. Bier demonstrates writing an interpolation formula between two variables, `x0` and `x1`, parameterized by a blending variable named `a`. By selecting the letter `a` and pressing the "looks" chord `Look-G` (for Greek), the character instantly displays as an elegant $\alpha$ on screen, rendering the source code with mathematical clarity while retaining its underlying identifier identity for the compiler.
```mesa -- Interpolation formula rendered in Tioga with Greek looks: (1 - α) * x0 + α * x1 ```
Taking visual integration even further, Tioga allows vector illustrations to be embedded directly into source files. Bier opens `GGCirclesImpl.mesa`—a module from the Gargoyle illustration system he created for his UC Berkeley Ph.D. dissertation—and scrolls down to the `CircleMeetCircle` procedure. Embedded directly inline with the algorithmic logic is a full geometric diagram showing intersecting circles, annotated with the exact variable names used in the surrounding code.
- **Typographic looks in code**: Pressing `Look-G` on the character `a` transforms it into $\alpha$, preserving ASCII identity under the hood while delivering clean mathematical rendering. - **Embedded Gargoyle graphics**: Procedural code files can host labeled vector diagrams to visually explain complex geometric calculations like circle intersections.
---
[54:18](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3258s) Cedar Modules: Interfaces, Implementations, and `Get Info`
Bier explains that the Cedar software architecture is built around a rigorous separation between interfaces and implementations, a design pattern inherited from Mesa that directly contributed to PARC's high degree of software reuse. Every library must define an interface (a `Definitions` module) specifying procedure signatures, types, and constants. These definitions contain no implementation bodies whatsoever. For example, a constructor routine that produces a circle from a center point and a `REAL` (floating-point) radius defines its return type purely as an abstract `Circle`.
Implementation code resides in one or more separate files, conventionally designated with an `Impl` suffix (such as `GGCirclesImpl.mesa`). This decoupling allows multiple interchangeable implementations to exist for a single interface, making it possible to swap between stable and experimental versions of an engine at compile or bind time. Tioga bridges these conceptual layers directly within the editor: selecting an interface name and clicking the `Get Info` menu button instantly resolves and opens the corresponding implementation module exporting that interface.
- **Rigorous separation of concerns**: Cedar `Definitions` files declare public API contracts; `Impl` modules contain the actual executable bodies. - **Multiple implementation backends**: A single definitions file can be backed by multiple implementations, enabling side-by-side experimental code or partitioning oversized files. - **`Get Info` cross-navigation**: A built-in Tioga menu command that instantly pivots from an interface definition directly into its concrete implementation module.
[57:07](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3427s) Code Navigation and Introducing the Gargoyle Graphics Tool
Eric Bier demonstrates how Tioga integrates code navigation directly into its top menus. By highlighting an identifier and clicking the "Def" button in the menu, the editor immediately jumps to the source code definition of that procedure. As Bier notes, “So all of those things just are built right into the menus at the top of Tioga and available to you anytime that you're programming.”
Changing gears, Bier closes his working window to introduce Gargoyle, the 2D illustration tool developed as part of his UC Berkeley doctoral dissertation. Moving the Gargoyle window to the left column of the display, he explains that while it provides basic geometric primitives like squares, circles, and triangles, its core innovation lies in interactive precision drawing. Gargoyle is built around a technique called "snap-dragging," which allows users to construct complex, exact shapes dynamically. Bier also points out the menus arranged along the top of the Gargoyle window, remarking that they were actually drawn using Gargoyle itself under an architectural paradigm known as "documents as user interfaces."
[58:58](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3538s) Snap-Dragging and Precision Drawing in Gargoyle
Bier explains the philosophy behind snap-dragging, likening it to classical geometric construction: “So the idea of the snap dragging techniques for drawing precise shapes is that you can ask the system to give you some guidelines; it's kind of like a ruler and compass construction approach except without all the tedium that you remember from ruler and compass construction in high school.” With automatic mode active, the system generates dynamic alignment lines and intersection rays as the user sketches.
To demonstrate, Bier draws an equilateral triangle with a horizontal base measuring exactly one inch on a side simply by dragging along the system-provided guide rays. He pauses briefly while recalling the exact keystroke and mouse combinations for transformation operations, testing rotate and scale before setting up an angled construction. Setting guideline constraints to 0 degrees (horizontal) and 60 degrees (slanted just past vertical), he sketches out a stylized, italicized letter "G" directly on the canvas without needing manual coordinate entry.
[01:01:43](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3703s) Mouse Button Modalities and Stuffing Graphics into Tioga
Gargoyle carries over the three-button interaction language of the Tioga text editor. Bier middle-clicks an edge of the drawn letter "G" to select the segment, then right-clicks adjacent segments to extend the selection across multiple connected lines, mirroring the gesture used to extend text selections from words to phrases in Tioga. He then uses the drag operation, snapping the selected segments along the 60-degree construction guidelines to reshape the letter with geometric precision.
```mermaid flowchart LR accTitle: Gargoyle to Tioga Graphic Transfer accDescr: Workflow showing how a graphic constructed in Gargoyle is transferred into a Tioga document using Interpress and mouse accelerators. subgraph Gargoyle["Gargoyle Vector Editor"] G1["Draw/Select Shape<br/>(e.g., Purple 'G')"] G2["Interpress Menu<br/>(3-Column Pop-up)"] G1 --> G2 end subgraph Accelerator["Shortcut Trigger"] A1["Middle-Click Menu Button<br/>(No Shift / No Ctrl)"] G2 --> A1 end subgraph Tioga["Tioga Document"] T1["Target Node Selection<br/>(Double-Click)"] T2["Graphic Embedded Inline<br/>('Stuff to Tioga')"] T1 --> T2 end A1 --> T2 ```
After tinting the "G" purple and scaling it down, Bier demonstrates embedding the illustration directly into a Tioga document. In the Interpress menu, he locates the "Stuff to Tioga" operation and highlights the structure of Gargoyle’s pop-up menus. Rather than displaying a single linear list, options appear in three columns corresponding to left, middle, and right mouse clicks, modified by Shift and Control:
- Left column operations trigger with a left mouse click. - Middle column operations trigger with a middle mouse click. - Right column operations trigger with a right mouse click. - Combinations with Shift and Control map up to twelve distinct operations to direct accelerators without opening submenus.
Because "Stuff to Tioga" is mapped to a middle-click with neither Shift nor Control held, Bier selects a target node in the Tioga document with a double-click, invokes the command, and the vector artwork embeds directly into the document text flow.
[01:04:57](https://www.youtube.com/watch?v=z_dt7NG38V4&t=3897s) Documents as User Interfaces and Clickable Buttons
Bier elaborates on the concept of "documents as user interfaces," explaining that graphic elements and text in Cedar can be imbued with active programmatic behavior. In Gargoyle, any geometric shape or text label can have associated behavioral code that fires when clicked. Pop-up palettes—such as font selection panels where a Control-right-click sets the largest bold font—are regular Gargoyle drawings wired up as control surfaces. As Bier observes, “The more you use Gargoyle, the faster you get at operations like this because of the way the menus work.”
This capability extends throughout the Cedar environment wherever Tioga handles text display. In the Commander console, Bier runs `ButtonLS`, an enhanced version of the traditional directory listing command. Alongside each listed file name, `ButtonLS` renders a small graphic rectangle. The rectangle is an interactive Tioga active element: clicking it automatically invokes an open command on that specific file, turning a plain terminal output stream into an ad-hoc graphical navigation panel.
[01:07:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4054s) Package Management in Cedar: DF Files, SModel, and BringOver
Bier shifts focus to software configuration and release management, contrasting modern tools like CVS, Subversion, and Git with Cedar's DF (Description File) system. He highlights its central role in day-to-day work, stating, “Let me talk a little bit about DF files and the commands BringOver and SModel because they were another key to why we were so productive in the Cedar environment.” In Cedar, every package includes a `.df` file specifying all files belonging directly to the package, as well as the external Cedar libraries it requires.
```mermaid flowchart TD accTitle: DF Package Management Dependency Resolution accDescr: Diagram illustrating how BringOver reads a DF file, fetches local sources, and recursively fetches dependencies using Using clauses. subgraph Package["Hello.df Package Description"] DF["Hello.df<br/>Author: EBSU<br/>Directory: Cedar 13.0"] Local["Local Source:<br/>HelloWorldImpl.mesa"] DF --> Local end subgraph Imports["Imported Subsystems"] I1["Atom"] I2["Basics"] I3["Commander"] I4["IO"] I5["Ropes (Immutable Strings)"] end DF -->|"BringOver (Using Clause)"| Imports subgraph SModelAction["Remote Sync"] SM["SModel Command<br/>(Commit / Push to Server)"] end DF -.-> SM ```
Examining a minimal example, `Hello.df`, Bier walks through its structure: - **Header Metadata**: Automatically records the author (in this instance, `EBSU` for "Eric Bier Super User") and target server directory (`Cedar 13.0`). - **SModel Command**: The tool used to commit or push packages to the central file server (where "S" stands for "System" modeling). - **Direct Files**: Lists implementation units belonging directly to the project (e.g., `HelloWorldImpl`). - **Imports with `Using` Clauses**: Explicitly declares imported modules—such as `Atom`, `Basics`, `Commander`, `IO`, and `Ropes` (Cedar’s immutable string data type). The `Using` clause ensures that only the interface definitions needed to compile the local package are retrieved rather than the entire remote subsystem. - **Version Rules**: Syntax such as `~=` specifies package version constraints, permitting developers to check out the latest release, freeze against a specific timestamp, or download only if the server version is strictly newer than the local copy.
To demonstrate dependency resolution in action, Bier locates an existing `Cedar 13` version of the Gargoyle package on disk, runs the `FindR` utility to locate `Gargoyle.df`, and invokes `BringOver` to begin pulling its source tree and dependencies into his local workspace.
[01:11:34](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4294s) Fetching Files via DF and Compiling Hello World
Using a shift-select gesture to paste into the command area, Eric Bier triggers Cedar's Description File (`.df`) machinery. The system resolves the Gargoyle `.df` file and automatically recurses into all dependent `.df` packages, pulling over 366 files into the local directory. Running a directory listing confirms that the complete set of interfaces and implementation files has arrived, allowing Bier to open and edit local copies of Gargoyle modules such as `GGCircles.mesa` and its implementation (`GGCirclesImpl`).
```mermaid flowchart TD accTitle: DF File Dependency Resolution and Compilation accDescr: Flowchart showing how Cedar retrieves package dependencies and compiles a module into a registered command.
subgraph DF_Machinery["DF Package Management"] DF["gargoyle.df"] --> Recurse["Recursive DF Resolution"] Recurse --> Files["366 Local Files Fetched"] end
subgraph Compile_Run["Compilation & Execution"] Edit["Edit HelloWorldImpl.mesa"] --> Compile["Compile Module"] Compile --> Register["Register Command with Commander"] Register --> Exec["Execute 'hello' in Command Shell"] end
Files -.-> Edit ```
To demonstrate the edit-compile-run loop, Bier opens a simple `HelloWorld` program. He modifies the text from "January 24 2019" to include a specific time—"10:30 a.m."—and saves it. While Cedar includes comprehensive tools to compute build dependencies automatically across entire packages, Bier triggers compilation on the single module (`HelloWorldImpl`). Once compiled, running the module registers a new command called `hello` with Cedar's Commander shell. Bier executes `hello`, and the terminal immediately prints out the updated message. Chris Jacobi points out an essential architectural convenience:
> “Here Eric didn't say anything about linking because whatever the linking is will be read out of that one DF file which seems so simple.”
- The DF machinery recursively retrieved 366 files required to build and run Gargoyle. - Linker documentation in contemporary systems could span dozens of pages, whereas Cedar derived linking and loading specifications directly from the `.df` package definitions without requiring manual link steps.
---
[01:15:50](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4550s) The Philosophy of Tioga: Unified Text Editing and Pending Delete
Prompted to discuss why Tioga served simultaneously as a publication document editor and a software development editor, Bier explains the immense practical benefits of a ubiquitous text editing substrate. Once a user internalizes motor patterns—such as paragraph styling, bolding, or multi-button mouse selection chords—those habits work identically across every UI element in Cedar, from single-line text input fields in forms to full conference research papers. It made collaboration effortless; a researcher could lean over an administrative assistant's shoulder and guide their actions using the exact same keystrokes and shortcuts used in programming. Chris Jacobi adds historical perspective on the design choice:
> “It's actually obvious: you need a program editor, you have a text editor, so why not use that? So if you had to argue and to reason at that time, you would have to reason why you would not want to do it that way.”
Bier demonstrates the power of Tioga's selection and editing semantics. Selecting text highlights it in reverse video, which activates "pending delete"—typing any new character immediately overwrites the entire selected range without needing a prior backspace or delete command. Furthermore, moving and copying follow consistent modifier combinations with mouse selections: holding `Shift` while selecting copies text into the caret location, while holding `Ctrl` and `Shift` simultaneously cuts the selection from its original spot and moves it directly to the target cursor position.
- Selection chords allow rapid boundary definition from word to word. - Reverse-video selection doubles as visual confirmation of pending deletion. - `Shift` + mouse drag/click performs an in-place copy. - `Ctrl` + `Shift` + mouse drag/click performs a move (cut-and-paste) in a single operation.
---
[01:20:42](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4842s) Historical Lineage: Engelbart's NLS, Smalltalk, and Alto Roots
Paul McJones and Eric Bier reflect on the origins of Cedar's core user interface paradigms. McJones notes that Tioga's structured statement nesting and "clipping levels" can be traced back to Doug Engelbart's NLS (oN-Line System), an effort contributed to by researchers like Bill Paxton—who co-developed Tioga alongside Doug Wyatt. During the mid-1970s at Xerox PARC, the Xerox Alto suffered from severe memory constraints, forcing each standalone application to monopolize the entire machine; programmers used primitive code editors for development and separate, heavier tools for formatted documents.
```mermaid flowchart LR accTitle: Lineage of Cedar UI Paradigms accDescr: Historical progression of concepts from NLS, Alto, and Smalltalk into Cedar.
NLS["Doug Engelbart's NLS<br>(Hierarchical clipping levels)"] --> Cedar["Cedar Environment"] Alto["Xerox Alto Tools<br>(Left scrollbars, selection models)"] --> Cedar Smalltalk["Smalltalk-76 / Smalltalk-80<br>(Unified editors across UI)"] --> Cedar Cedar --> Workstations["1 MB+ Workstations<br>(Dorado / Sun)"] ```
Smalltalk pioneered running a single graphic and text toolset uniformly across an entire system despite the Alto's hardware limits. By the time Cedar emerged on larger "1 megabyte computers" (such as the Dorado workstation and subsequent architectures), these diverse concepts coalesced: NLS-style hierarchical levels, the Alto's left-hand scrollbars and selection models, and Smalltalk's architectural ubiquity. Bier demonstrates how structural levels function inside raw code: clicking repeatedly on an indentation level expands or collapses nested blocks, providing an outline view that makes navigating multi-page procedures manageable.
---
[01:23:15](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4995s) Tioga's WYSIWYG Nature and Interpress Printing
Addressing whether Tioga qualified as a full "What You See Is What You Get" (WYSIWYG) system, Bier clarifies that while formatting styles and embedded graphics rendered directly on screen, layout rendering was not 100% identical to the final printed output. For example, opening a conference paper formatted for two-column output displayed as a continuous single column within Tioga's editor; multi-column pagination occurred only during translation to Interpress or upon transmission to a laser printer.
Chris Jacobi observes that during Tioga's initial creation, screen rendering and physical printing necessarily diverged:
> “In the very early times we did not have smooth fonts—actually smooth fonts were still secret—but so we had bitmap fonts, which means when the text goes from the screen to the printer it will print with a mildly different font, and they had to be different because screen resolutions could never match printer resolutions at that time.”
Over time, outline and smoothed font advances narrowed that divide. The discussion turns to Interpress, Xerox's binary page description standard (and direct forerunner of PostScript). Bier searches his local directory for generated `.ip` (Interpress) files—such as those created for his "Toolglass and Magic Lenses" papers—and confirms that while dedicated tools like `IPViewer` allowed on-screen examination of raw printer streams, the standard workflow was generating Interpress raster descriptions and routing them directly to networked Xerox laser printers.
[01:26:32](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5192s) Previewing Printable Files and Interface Learnability
Examining printable files directly on the monitor revealed that characters often looked awkward due to screen font limitations. Users rarely edited printable target files directly; instead, they worked in Tioga files. Subtle differences existed between formats: text line-breaking in Tioga was tied dynamically to window width, whereas hardcopy column adjustments followed separate page-layout formatting.
An interlocutor notes that while the Cedar user interface feels consistent and meticulously designed, the heavy reliance on three mouse buttons gives the impression of a tool geared strictly toward power users, raising the question of how easily novices or non-programmers could discover commands and learn the system. Eric Bier explains that usage extended far beyond computer science researchers to administrative assistants and graphic artists. Several factors made the system approachable: - Package documentation was easy to locate and followed strict naming conventions. - Strong cultural norms governed updates: developers used SModel to commit new versions, followed standardized email notification templates detailing every change, and were expected to update documentation simultaneously.
```mermaid flowchart TD accTitle: Cedar Package Update Workflow accDescr: Standardized developer workflow for updating, tracking, and documenting a Cedar package. subgraph Development ["Code & Docs"] A["Modify Package Code"] --> B["Update Documentation File"] end subgraph Release ["Release Process"] B --> C["Save via SModel"] C --> D["Send Standardized Email Template"] end ```
[01:29:03](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5343s) Non-Expert Usability, Preview Tool, and Application Consistency
Bier attempts to load the `Preview` package to view a conference paper. It initially complains about missing fonts, but he succeeds in opening a viewer displaying full font outlines. While the text appears small at full page view, scaling it up makes the rendered outlines legible.
Chris Jacobi reflects on the apparent contradiction between hearing about Cedar’s complexity versus actually sitting down to use it. Jacobi points out that verbal explanations often overcomplicate things because developers take pride in design decisions:
> “When you actually sit on the machine and you are not thinking, you just use your fingers to do the fingering for you, then you will see the the logic behind it.”
Because the overarching design principles were logical, users could frequently guess how an unlearned command should work, and their intuition proved correct. Administrative assistants could compose and format complex documents without having to write Tioga code, while specialized tools maintained consistency: - Chip design editors required domain-specific commands (such as pressing `m` for a metal line or `t` for a transistor). - Even domain-specific tools retained familiar Tioga interaction patterns wherever possible.
[01:31:55](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5515s) The Origins of Gargoyle and Snapdragon
Asked about his involvement with the Gargoyle vector illustration system, Bier recalls that the project originated from his doctoral dissertation at UC Berkeley and was documented in a 1986 SIGGRAPH paper. His research focused on the Snapdragon technique—an interactive snapping mechanism functioning like a dynamic "ruler and compass on steroids."
PARC maintained an active dogfooding culture where research tools were adopted by the internal community. Users wanted to embed rich illustrations in documents, prompting Bier, Ken Pier, and Maureen Stone to develop Gargoyle. The system leveraged Michael Plass's Cedar Imager, an underlying library supporting: - Resolution-independent graphics - Arbitrary polygons and spline curves - Geometric clipping algorithms
PARC staff artist Steve Wallgren adopted Gargoyle to create posters for the PARC Forum, event brochures, and presentation graphics.
[01:35:04](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5704s) Snapping in 3D and Berkeley Advising
Bier expanded the Snapdragon interaction model into three dimensions with Gargoyle 3D. A key finding was that the identical 2D mouse and keyboard commands operated naturally in 3D environments without needing an exotic 3D cursor. By treating the cursor ray as a line projected from the user's eye into the scene, interactions snapped directly to 3D alignment guidelines, planes, or the surfaces of spheres (the spatial counterpart to compass circles).
Bier recalls the weekly routine of shuttling his progress across the bay: - Every week, he recorded a video demonstrating new snapping features. - He drove the tape across the Bay Bridge to UC Berkeley's Evans Hall. - His PhD advisor, Carlo Séquin, alongside Brian Barsky, reviewed the video alongside the Berkeley computer graphics lab graduate students.
[01:37:01](https://www.youtube.com/watch?v=z_dt7NG38V4&t=5821s) Language Features: Multiple Returns, Explicit Ranges, and Constraints
Returning to the Cedar code viewer, Bier opens `GGCirclesImpl` to highlight Cedar's language features using the `CircleMeetCircle` procedure, which computes the intersection between two geometric circles:
``` CircleMeetCircle: PROC [circle1, circle2: Circle] RETURNS [points: ARRAY [1..2] OF Point, hitCount: [0..2], tangent: BOOL] ```
Bier contrasts this directly with languages restricted to returning single values: - **Multiple return values:** The procedure simultaneously returns an array of intersection coordinates, an intersection count (`hitCount`), and a boolean flag (`tangent`). Naming these return values in the signature automatically creates local variables that can be assigned directly inside the procedure body. - **Custom array indices:** The array specifies `[1..2]`, making it explicit that the indices run from 1 to 2 rather than starting at zero. - **Subrange integer constraints:** Rather than using a generic integer for the intersection count, Cedar allows constraining the type declaration to the exact valid domain: `[0..2]`. - **Assignment operator:** Cedar uses a distinct left arrow character (`←`) for variable assignments rather than an equals sign.
[01:40:21](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6021s) Character Sets, Keyboards, and Assignment Syntax
Eric Bier demonstrates how default return values could be specified directly in a method header. A question arises from the audience about whether Cedar relied heavily on non-standard ASCII characters. Bier and Chris Jacobi clarify that it used only a small handful, the most notorious being the left-arrow character (`←`) for assignment. On original Xerox Alto and D-machine hardware, physical keyboards had dedicated keys for those characters. When Xerox PARC ported Cedar to Sun Microsystems workstations and SunOS in the late 1980s, these idiosyncratic keys had to be mapped onto standard Sun keyboards. Bier recalls that he was personally involved in creating that keyboard mapping table, as well as porting the Viewers window system to SunOS around 1987 under an internal project nicknamed "Windows by Winter," which aimed to have Viewers up and running on Sun hardware before December 21st.
```mermaid flowchart LR accTitle: Evolution of Cedar Keyboard and Assignment Syntax accDescr: Diagram showing the transition of Cedar assignment syntax from Xerox hardware to Sun workstations. subgraph XeroxHardware["Xerox Alto & D-Machines"] A["Physical Left-Arrow Key (←)"] --> B["Built-in Hardware Character Set"] end subgraph SunPort["Sun Workstations (Late 1980s)"] C["Windows by Winter Project"] --> D["Custom Sun Keyboard Mappings"] D --> E["Standard Syntax: ':=' for assignment"] end XeroxHardware -->|"Ported to SunOS"| SunPort ```
Jacobi points out that once the problematic left arrow was replaced by the standard Pascal-style `:=` operator, Cedar required no exotic characters to compile. Jacobi also reflects on how deeply the syntax ingrained itself into former PARC researchers: “And when I left Xerox I did for years to come—still occasionally today—I write equals and I mean with equals that we do a comparison and not an assignment, but considered colon-equals versus single equals is so much more intuitive than having two equals or just one equal.”
- Keyboards on Alto and D-machines (Dorado, Dolphin, Dandelion) directly supported Xerox’s extended character set. - The Sun port required software translation layers to map these keys onto commodity workstation layouts. - Replacing the left arrow with `:=` removed the last non-standard character dependency from the language core.
---
[01:43:15](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6195s) Object-Oriented Patterns and Multithreading via Language Primitives
Jacobi elaborates on the philosophical design of Cedar. While Xerox PARC pioneered object-oriented programming with Smalltalk, the Cedar language itself intentionally launched without built-in, formal object-oriented keyword constructs. Instead, Cedar provided a concise set of flexible primitives: first-class function variables, closures, and nested functions. These primitives allowed developers to write idiomatic object-oriented code without language bloat. Jacobi remarks: “I am not aware of a single program which didn’t use the object features of Cedar, but they were done with the primitives which were basically function variables and closures and nested functions.” Anonymous closures and lambda expressions were used ubiquitously across PARC codebases, even without explicit lambda syntax defined in the formal manual.
Paul McJones and Jacobi also discuss Cedar’s concurrency model. Threading was baked into the ecosystem from the start, descending directly from Mesa's pioneer work on monitors and threads. Jacobi notes that practically every Cedar program was multithreaded; the sole exception he could recall was the Cedar compiler itself. Concurrency was managed with robust synchronization primitives, complemented by an advanced exception-handling framework that permitted catching, inspecting, and re-throwing errors.
- Modularity and multithreading in Cedar were inherited from Mesa, but were streamlined for ease of daily use. - Concurrency was ubiquitous throughout the operating environment, driving asynchronous background tasks and UI event queues. - Exception handling formed the basis not only for fault recovery, but also for diagnostic communication between subsystems.
---
[01:45:36](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6336s) Rich Typographic Code and Runtime Type Inspection (`REF ANY`)
Bier highlights a visual feature of the Tioga editor: integrating styled typography into executable code. He brings up an example where a variable named `d2` represents a distance squared; by formatting the `2` as a superscript exponent ($d^2$) directly in the editor, its mathematical meaning is immediately recognizable.
```mermaid flowchart TD accTitle: Cedar REF ANY Type Inspection Architecture accDescr: Flowchart illustrating how REF ANY acts as a generic reference that enables runtime type introspection. A["Generic Pointer: 'REF ANY'"] --> B{"Runtime Type Inspection"} B -->|"Type query / NARROW"| C["Circle Object ('REF CircleObject')"] B -->|"Type query / NARROW"| D["Viewer Object ('REF ViewerObject')"] B -->|"Type query / NARROW"| E["Arbitrary Dynamic Type"] C --> F["Execute specific handler / method"] D --> F E --> F ```
The conversation shifts to the Cedar type system. Jacobi explains that because the original Cedar interactive debugger was written in Cedar itself, the language needed the ability to introspect any memory structure. This design resulted in runtime type inspection (reflection) decades before it became common in mainstream languages. Central to this capability was `REF ANY`, a universal pointer type: - Any heap-allocated reference could be assigned to a `REF ANY`. - Programs could inspect the runtime type tag of a `REF ANY` pointer dynamically using type-switch and select statements. - When asked if Cedar supported generic types, Jacobi clarifies that Cedar lacked parameterized generics, substituting `REF ANY` instead. While this incurred a slight dynamic dispatch/indirection overhead compared to modern zero-overhead templates, the high performance of Dorado hardware made the distinction negligible in practice.
---
[01:49:01](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6541s) Function Variables, Callbacks, and Reference Semantics
Jacobi and Bier discuss how programming against `REF ANY` and nested function variables shaped Cedar architecture. Standard library routines frequently accepted a `REF ANY` payload alongside a callback function pointer. Because nested procedures closed over the lexical scope of their enclosing blocks, developers could pass callbacks back and forth across abstraction layers. Jacobi acknowledges that this pattern could sometimes devolve into convoluted spaghetti logic—where a callback invoked another callback deep inside a client module—yet it delivered immense extensibility.
Bier notes a key syntactic distinction in Cedar code between a value and a reference to that value, citing an interface example: - A `CircleObject` represented the underlying structure record. - A `Circle` was defined as `REF CircleObject`. - Creating an instance required declaring a variable of type `Circle` and assigning it `NEW CircleObject`.
Jacobi adds that while `Circle` and `CircleObject` were strictly distinct types in the compiler's symbol table, the language offered convenient syntactic sugar: dereferencing was automatic. Programmers could simply use dot notation (`circle.radius`) across chains of pointers without manually dereferencing each pointer step.
---
[01:53:04](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6784s) The Dorado Hardware Cursor, Status Codes, and State Rollback
Bier shares a hardware anecdote regarding the Xerox Dorado's cursor rendering. On the Dorado, cursor positioning was hardwired into dedicated microcode and CPU cycles:
> “One of the interesting things about the Dorado was that it dedicated some of its CPU time to drawing the cursor on the screen; every few cycles the cursor would be updated, and what that meant was that the cursor was one of the most reliable objects on the screen. Even if there was a problem and the rest of Cedar had frozen, the cursor would still move around, track your mouse nicely.”
Because the hardware cursor remained operational even during total operating system freezes or unhandled crashes, PARC engineers turned it into an out-of-band diagnostic display. The system flashed numeric diagnostic codes directly inside the cursor bitmap itself. Developers memorized these numeric codes to immediately identify system failures; Bier and Jacobi single out error code `815` as one of the most infamous fatal crash codes.
The segment concludes as Jacobi humorously expresses nostalgia for Cedar's development capabilities: “I wish I had it.” Bier then introduces Cedar’s powerful session-checkpointing mechanism, which allowed users to suspend their active session, snapshot the exact memory state to disk, and instantly roll back the entire running environment whenever needed.
[01:55:01](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6901s) Suspending State and "Let's Do the Roll Back Again"
Reflecting on how the system handled session persistence, Eric Bier recalls the mechanics of suspending and resuming execution by storing state. He shares a humorous anecdote from PARC lore about an in-joke parody song crafted around this workflow: “As a joke one year someone wrote a little song to the tune of ‘Let's Do the Time Warp Again’ from Rocky Horror, except it was ‘Let's Do the Roll Back Again.’”
As the presentation comes to an end, Bier invites any final thoughts, asking, “Anyway, anyone else have any last words?” The attendees respond with warm appreciation, thanking him for the in-depth walkthrough of Cedar, to which Bier graciously replies, “You are very welcome.”
[01:55:35](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6935s) The OpenR and FindR Commands
Before wrapping up completely, Bier highlights a specific set of commands he had been quietly invoking on screen during the final moments of the demonstration without full explanation: `OpenR` and `FindR`. He clarifies the naming convention and purpose behind them, explaining: “I believe the R is for release, and open in the sense of I've opened something for editing or viewing.”
- **`OpenR` and `FindR`**: File-access commands in the Cedar environment, where the trailing "R" signifies opening or finding an official "release" version of a document or source file for viewing and editing.
## Notable quotes > [01:15:50](https://www.youtube.com/watch?v=z_dt7NG38V4&t=4550s) It's actually obvious: you need a program editor, you have a text editor, so why not use that? — Chris Jacobi
> [01:43:15](https://www.youtube.com/watch?v=z_dt7NG38V4&t=6195s) I am not aware of a single program which didn’t use the object features of Cedar, but they were done with the primitives which were basically function variables and closures and nested functions. — Chris Jacobi
> [26:53](https://www.youtube.com/watch?v=z_dt7NG38V4&t=1613s) Tioga is really important in Cedar because it's everywhere. — Eric Bier
## Mentioned ACM SIGCHI, Andy Daniels, Bill Paxton, Brian Barsky, BringOver, ButtonLS, Carlo Séquin, Cedar, Cedar Imager, Cedar Mesa, Chris Jacobi, Chuck Geschke, Commander, Computer History Museum, Computer Science Laboratory, Dandelion, Docs, Dolphin, Dorado, Doug Engelbart, Doug Wyatt, Edit Tool, Eric Bier, Evans Hall, GGCirclesImpl, Gargoyle, Gargoyle 3D, Hansen Hsu, IPViewer, Interlisp, Interpress, John Warnock, Ken Pier, Maureen Stone, Mesa, Michael Plass, MIT, Modula, NLS, Nicholas Briggs, Pascal, Paul McJones, Pilot, PostScript, Preview, REF ANY, Rick Cattell, SModel, SIGGRAPH, Scott McGregor, Smalltalk, Snapdragon, Solaris, Solidviews, Steve Wallgren, Sun Microsystems, SunOS, Tioga, UC Berkeley, Viewers, Warren Teitelman, Windows by Winter, X Windows, X11, Xerox Alto, Xerox Dolphin, Xerox Dorado, Xerox PARC, Xerox SDD, Xerox Star (8010 Information System)
## Video description [Recorded on January 24, 2019]
This interpretive production was created from archival footage of Eric Bier, PARC research scientist, demonstrating the Cedar integrated environment and programming language on January 24, 2019. Cedar was an evolution of the Mesa environment/language, developed at PARC’s Computer Science Laboratory originally for the Xerox Alto. Mesa was modular and strongly-typed, and influenced the later Modula family of languages. Cedar/Mesa ran on the D-machine successors to the Alto (such as the Dorado) and added features including garbage collection, and was later ported to Sun workstations. Cedar/Mesa’s integrated environment featured a graphical window system and a text editor, Tioga, which could be used for both programming and document preparation, allowing for fonts, styles, and graphics to be embedded in code files. The editor and all its commands were also available everywhere, including on the command console and in text fields. The demo itself is running through a Mac laptop remotely logged into Bier’s Sun workstation at PARC using X Windows. Bier demonstrates the Cedar development environment, Tioga editor, editing commands using three mouse buttons, sophisticated text search features, the command line, and the Gargoyle graphics editor, which was developed as part of Bier’s UC Berkeley Ph.D. dissertation. Bier is joined by Nick Briggs, Chris Jacobi, and Paul McJones.
Catalog number:102781041 Lot number: X8888.2019
[Source](https://www.youtube.com/watch?v=z_dt7NG38V4)