Demonstration of the Xerox PARC Cedar integrated environment (2019) [video]
This is a great video!<p>They discussed and demonstrate Cedar&#x27;s early text selection, copy and move commands, and compare them to Larry Tesler’s cut and paste (which didn&#x27;t require any special keys or more than one mouse button). The Tioga text editor and other Cedar applications made common operations like repeatedly copying text into a document from different places very easy and streamlined (fewer actions than cut, copy and paste), by using the shift key while selecting text.<p>Cedar took full advantage of the three button mouse as well as the control and shift keys (for 12 combinations of actions in any context, that worked the same everywhere).<p>I think SunView and maybe even OpenWindows also supported a similar (but obscure) “quick paste” mode, where you hold down the special “Copy” function key, select some text <i>without</i> disturbing the current input focus, cursor position, or text selection, and then when you release the key, that text is pasted into the current input focus at the current position, moving the cursor forward. That way you didn’t have to lose your current selection or position, in order to just select some other text and copy it in.<p>Here, I found the code to do it in an old version of NeWS -- it was the cut key to move, or the paste key to copy, and it&#x27;s called the &quot;Secondary&quot; selection (rank=Secondary):<p><a href="https:&#x2F;&#x2F;github.com&#x2F;duncanmak&#x2F;noticias&#x2F;blob&#x2F;6f0a78186ee074828cbdf730169ad99aa3c64edd&#x2F;etc&#x2F;NeWS-2.0&#x2F;NDE&#x2F;OLUI.ps#L63" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;duncanmak&#x2F;noticias&#x2F;blob&#x2F;6f0a78186ee074828...</a><p><pre><code>    % Cut key: Either delete the primary selection (stashing it
    % on the clipboard) or move the secondary selection to the
    % focus, if one was made.

    % Paste key:
    % Insert either the secondary selection (if one was made)
    % or the contents of the clipboard.
</code></pre>
When he browses through the code, you can see a whole bunch of X11 stuff.<p>I believe that stuff is the port of Cedar to the Sun. Xerox PARC developed &quot;Portable Common Runtime&quot;, which was basically the Cedar operating system runtime, on top of SunOS (1987 era SunOS, not Solaris, so no shared libraries or threads, which PCR had to provide). He demonstrates compiling a &quot;Hello World&quot; Cedar shell command, and (magically behind the scenes) dynamically linking it into the running shell and invoking it.<p>Experiences Creating a Portable Cedar.<p>Russ Atkinson, Alan Demers, Carl Hauser,
Christian Jacobi, Peter Kessler, and Mark Weiser.<p>CSL-89-8 June 1989 [P89-00DD6]<p><a href="http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8_Experiences_Creating_a_Portable_Cedar.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8...</a><p>&gt;Abstract: Cedar is the name for both a language and an environment in use in the Computer
Science Laboratory at Xerox PARC since 1980. The Cedar language is a superset of Mesa, the
major additions being garbage collection and runtime types. Neither the language nor the
environment was originally intended to be portable, and for many years ran only on D-machines
at PARC and a few other locations in Xerox. We recently re-implemented the language to make
it portable across many different architectures. Our strategy was, first, to use machine dependent C code as an intermediate language, second, to create a language-independent
layer known as the Portable Common Runtime, and third, to write a relatively large amount of
Cedar-specific runtime code in a subset of Cedar itself. By treating C as an intermediate code
we are able to achieve reasonably fast compilation, very good eventual machine code, and all
with relatively small programmer effort. Because Cedar is a much richer language than C, there
were numerous issues to resolve in performing an efficient translation and in providing
reasonable debugging. These strategies will be of use to many other porters of high-level
languages who may wish to use C as an assembler language without giving up either ease of
debugging or high performance. We present a brief description of the Cedar language, our
portability strategy for the compiler and runtime, our manner of making connections to other
languages and the Unix operating system, and some measures of the performance of our
&quot;Portable Cedar&quot;.<p>PCR implemented threads in user space as virtual lightweight processes on SunOS by running several heavy weight Unix processes memory mapping the same main memory. And it also supported garbage collection. Mark Weiser worked on both PCR and the Boehm–Demers–Weiser garbage collector.<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boehm_garbage_collector" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boehm_garbage_collector</a><p>This is the 1988 &quot;Garbage Collection in an Uncooperative Environment&quot; paper by Hans-Juergen Boehm and Mark Weiser:<p><a href="https:&#x2F;&#x2F;hboehm.info&#x2F;spe_gc_paper&#x2F;preprint.pdf" rel="nofollow">https:&#x2F;&#x2F;hboehm.info&#x2F;spe_gc_paper&#x2F;preprint.pdf</a><p>&gt;Similarly, we treat any data inside the objects as potential pointers, to be followed
if they, in turn, point to valid data objects. A similar approach, but restricted to procedure frames, was used in the Xerox Cedar programming environment [19].<p>[19] Rovner, Paul, ‘‘On Adding Garbage Collection and Runtime Types to a Strongly-Typed, Statically Checked, Concurrent Language’’, Report CSL-84-7, Xerox Palo Alto Research Center.<p><a href="http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-84-7_On_Adding_Garbage_Collection_and_Runtime_Types_to_a_Strongly-Typed_Statically-Checked_Concurrent_Language.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-84-7...</a><p>My guess is that the BDW garbage collector had its roots in PCR (pun intended, in fact this entire message was just an elaborate setup ;), but I don&#x27;t know for sure the exact relationship between Cedar&#x27;s garbage collector, PCR&#x27;s garbage collector (which is specifically for Cedar code), and the Boehm–Demers–Weiser garbage collector (which is for general C code). Does anybody know how they influenced each other, shared code, or are otherwise related? Maybe there&#x27;s a circular dependency!