The EncyCMUCLopedia
A CMU Common Lisp Documentation Collection

Milano, Italy -- Jun 17, 2001 -- 13:33 CEST

Paolo Amoroso (editor), amoroso@mclink.it

Revision history

Contents

Introduction
Suggested Reading Paths
User Documentation
Implementor Documentation

Introduction

In this section you will find information about the purpose of the EncyCMUCLopedia, its availability and structure, its copyright and licensing status, and how to provide feedback to the editor.

Overview

This is the EncyCMUCLopedia, an extensive collection of documents concerning CMU Common Lisp (CMU CL). CMU CL is a free, high-quality ANSI Common Lisp system for Unix workstations originally developed at the School of Computer Science at Carnegie Mellon University.

The EncyCMUCLopedia is intended as a resource for both users and implementors. Its purpose is to package and present all useful material directly related to CMU CL. The EncyCMUCLopedia does not contain, however, references to introductory Common Lisp material, for which you may check the Web site of the Association of Lisp Users (ALU). It is not a tutorial or reference guide to CMU CL either.

The documents included here were written at different times by different authors, mostly CMU CL developers. The information they contain may be incomplete, incorrect or out of date. It is your responsibility to check its accuracy. As the editor of the EncyCMUCLopedia I look for interesting material, organize it, add appropriate comments and cross references to an index, and package the collection for distribution. See below for information on how documents are selected and organized.

All material written in the context of the CMU CL project, and the EncyCMUCLopedia as an aggregation of content, comes with the following lack of warranty:

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. The author(s) do not accept responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all. No warranty is made about the software or its performance. This software is made available AS IS, and is distributed without warranty of any kind, either expressed or implied. In no event will the author(s) or their institutions be liable to you for damages, including lost profits, lost monies, or other special, incidental or consequential damages arising out of or in connection with the use or inability to use (including but not limited to loss of data or data being rendered inaccurate or losses sustained by third parties or a failure of the program to operate as documented) the program, even if you have been advised of the possibility of such damages, or for any claim by any other party, whether in an action of contract, negligence, or other tortious action.

For documents prepared in other contexts each entry contains appropriate copyright, lack of warranty and licensing information. Check these conditions before redistributing part or all of this collection, or before preparing derivative works.

[Contents]

Getting and Installing the EncyCMUCLopedia

The EncyCMUCLopedia packages in a single collection most of the existing documentation on CMU CL. It also comes with a sort of annotated bibliography, the page you are reading now, with comments and links to the actual documents.

The distribution of the EncyCMUCLopedia is available at:

http://cvs2.cons.org:8000/cmucl/doc/EncyCMUCLopedia/
and consists of a compressed archive whose name has the following structure:
encycmuclopedia-yyyymmdd[d].tar.gz
encycmuclopedia-yyyymmdd[d].tar.bz2
where the date yyyymmdd provides version information and the optional d character flags draft releases. The version with the bz2 extension was processed with the more space efficient bzip2 file compressor.

To install the EncyCMUCLopedia you need about 10MB of disk space. Just extract the compressed archive in a suitable directory such as /usr/local/lib/cmucl. Then open file index.html in doc, the top-level directory of the distribution, with any Web browser.

[Contents]

Document Selection and Organization

This collection includes material directly related to the CMU CL system, its development environment, language extensions and libraries. Since CMU CL is mostly compliant with ANSI Common Lisp, general and introductory Common Lisp and CLOS documents have been left out from the EncyCMUCLopedia.

Any Common Lisp or CLOS book is a good source of information about standard language features. If you are interested in such material, check the Web site of the Association of Lisp Users (ALU) or download the CMU CL distribution for Debian Linux, which comes with Common Lisp and CLOS tutorials.

The documents in the EncyCMUCLopedia come from different sources and may be incomplete, inaccurate or out of date. They may also not cover all the features of the system and its use. Therefore, their grouping in the following sections reflects the state of available material, not a comprehensive and accurate classification of CMU CL's features. In other words, if a topic is not mentioned in the EncyCMUCLopedia, there's probably no documentation about it.

Documents are listed in entries similar to the following sample one:

Document title (within each section, titles are sorted in alphabetical order)
Author(s) -- Last modification date
[PostScript] [PDF] [HTML] [ASCII] [Online version] [Additional online material]: links to the available formats for the document (you may need to configure your Web browser to view some of them), and possibly to the latest online version and additional material, such as source code or scripts
Description of the document's purpose and content.

Copyright and licensing information.

Information about authors and modification dates is included only if known. Some documents may be available in only one format. For a few of the documents, only links to the Web sites where they are accessible are provided.

[Contents]

Feedback

Feedback on the EncyCMUCLopedia is welcome and encouraged. If you have comments or suggestions, or you are willing to contribute new documents or corrections, write to Paolo Amoroso amoroso@mclink.it. Feel free to critique every aspect of this work, from the selection of documents to the layout of this index, from its content to my unoptimized English compiler.

[Contents]

Acknowledgments

I would like to thank all those who provided me with help and encouragement for this project. Marco Antoniotti sent me the Motif interface documents he converted to LaTeX2e. Daniel Barlow contributed several documents. Gary Byers contributed the notes on the PowerPC port. Martin Cracauer hosted the EncyCMUCLopedia at cons.org and provided some material. Vinodh Das pointed out some "stealth" typos. Jerry Gregg contributed his article on installing CMU CL. Robert MacLachlan and Pierre R. Mai granted permission to include their newsgroup and mailing list messages. Eric Marsden provided the updated CMU CL user's manual. William Harold Newman shared his notes on SBCL. I thank Antonio Piccolboni for his feedback -- and you should thank him too, because he spared you the trouble of reading early drafts of the EncyCMUCLopedia. Russ Urquhart kindly converted the CLX reference manual to PostScript and PDF from the Interleaf source, probably making it possible to comfortably browse it for the first time in the history of Lispkind. Peter Van Eynde put together an extensive collection of CMU CL documents, from which I took some material.

Fortunately for them, I take all the responsibility for any errors, inaccuracies or omissions in this work. But unfortunately for them, I take all the fun of the project.

[Contents]

Suggested Reading Paths

It is not necessary to read all the material referenced in the EncyCMUCLopedia. Users are often interested in quickly accessing the documentation that may help them in solving particular problems with CMU CL, or in using the system and its tools to perform various tasks.

So the following subsections are structured around typical goal-based user profiles. Read their introductions to see whether they match the tasks you are interested in. If so, follow the suggested steps. The paths are ordered so that background material, and other important or relevant information, is given first. If you find what you need before the end of a path you may safely skip the remaining entries.

Regardless of the user's goals, the CMUCL User's Manual should probably be a required reading for everybody.

Using CMU Common Lisp

If you are a Common Lisp programmer who needs to become familiar with CMU CL, or you are new to the language and need to install and use the system, this reading path is for you. You may stop at step 4 if you would just like to learn more about CMU CL in order to decide whether it's the right system for you. Here is what you may do:

  1. learn about the features of CMU CL by checking the cmucl online manual page
  2. read CMU Common Lisp on Linux and Installing CMU CL 18c on Red Hat Linux 7.0 for installation and configuration information
  3. read the lisp online manual page for general usage information
  4. carefully read the CMU CL user's manual -- you may want to print it and keep it handy (in case of problems with CMU CL, skim the latest release notes)
  5. if you can not use or do not like the Emacs editor, read the Hemlock user's manual
  6. if your applications are based on CLOS, check the information and tips for using PCL
  7. if your applications require multi-processing, available only on the x86 port, read about threads and locks
  8. if you are interested in graphics programming, read about CLM, how it is accessed from CMU CL, and the differences with the CMU CL implementation (you may also need to check some low level CLX functions)

[Contents]

Modifying CMU Common Lisp

This reading path is for you if you need to build CMU CL from source because you have slightly modified the system, added minor features, or you would just like to customize it. Follow these steps:

  1. learn how to build CMU CL from source by following the appropriate compilation steps (there are specific instructions for the Debian Linux port)
  2. for learning how to change the behavior of PCL without rebuilding the system, check the Metaobject Protocol
  3. if you need to customize the Hemlock editor or add new features to it, read the command implementor's manual
  4. you may want to skim the manual that discusses the design of CMU CL

[Contents]

Contributing to the Development of CMU Common Lisp

If you are an experienced Common Lisp programmer and you would like to do major changes to CMU CL, contribute to its maintenance and further development, or simply understand how it works, this reading path is for you. First become familiar with building and modifying the system, then follow these further steps:

  1. read the manual that discusses the design of CMU CL
  2. read about the representation of data types
  3. read about the memory layout
  4. if you need to modify or extend PCL, read about its method lookup strategies
  5. if you develop for the MIPS architecture, read the notes on calling conventions, register usage and other relevant issues
  6. check the overview of the changes to CMU CL in order to produce SBCL, and see whether you are able to contribute to the development of this interesting experimental system

[Contents]

User Documentation

The documentation grouped in this section covers topics of interest to CMU CL users. In this context users are programmers who develop Common Lisp applications with CMU CL.

Development Environment and Tools

This subsection references documents that provide general information about CMU CL and discuss user interface issues, programming tools and language extensions.

CMU CL bugs
CMU CL developers
[ASCII]
A list of the known bugs of CMU CL.

This document is in the public domain.

CMU CL release notes
CMU CL developers
[ASCII]
The following notes provide information about specific releases of CMU CL. They discuss missing or new features, potential problems and bugs, and differences with previous releases. Next to each link is the version identifier of CMU CL, if known, to which the notes apply. Unless otherwise stated, the notes refer to all ports of CMU CL.

These documents are in the public domain.

CMU Common Lisp
CMU CL developers -- October 15, 1991
[ASCII]
The online manual page you can browse with the man cmucl shell command. It provides an overview of the features of CMU CL.

This document is in the public domain.

CMU Common Lisp configuration
Peter Van Eynde -- September 16, 1999
[ASCII]
This is the online manual page you can browse with the man cmuclconfig shell command. The cmuclconfig utility, available only on the Debian Linux port, dumps custom Lisp images containing selected packages such as the CLX and Motif Toolkit interfaces to the X Window system, and the Hemlock editor.

This document is in the public domain.

CMU Common Lisp on Linux
Daniel Barlow -- June 26, 2000
[HTML] [Online version]
CMU Common Lisp on Linux, currently in draft form, explains to beginners how to set up, configure and use a Common Lisp programming environment based on CMU CL and the Emacs editor under Linux.

Although the document deals mainly with Linux, most of the information applies also to other ports of CMU CL.

This document is in the public domain.

CMU Common Lisp programming environment
CMU CL developers -- October 15, 1991
[ASCII]
This is the online manual page you can browse with the man lisp shell command. It contains information about running (command line options) and configuring (environment variables, location of important files) CMU CL.

This document is in the public domain.

CMUCL User's Manual
Robert A. MacLachlan (editor) -- April 12, 2001
[PostScript] [HTML] [Online version]
This manual is the most important resource for CMU CL users and implementors. It illustrates the system's design choices, the tools provided by the development environment, and the language extensions.

Concerning design choices, the manual describes data representation, garbage collection strategies, interrupt processing and other implementation dependent issues. It also extensively discusses Python (the CMU CL compiler; no relation with the Python programming language), and the programming styles and techniques it encourages.

The tools presented in the manual are the source level debugger and its programming interface, the profiler, and the Python compiler. Note, however, that this document does not deal with the Hemlock editor, which comes with a separate user manual.

The language extensions described in CMU CL's user manual are the facilities for running external programs, a Unix interface, event dispatching facilities, a foreign function call interface, and support for interprocess communication and remote procedure call. The CMU CL multi-processing extension is currently available only on the x86 port. For more information, refer to the documents about multi-processing.

Included with permission.

Configuring packages
Peter Van Eynde -- May 1999
[ASCII]
A short note on config, the utility for dumping custom Lisp images. If you use the Debian Linux port check the manual of cmuclconfig, a front-end to config.

This document is in the public domain.

Design of the Common Lisp controller
Peter Van Eynde -- June, 2001
[ASCII] [Online version] [Additional online material]
The Common Lisp Controller is a proposal for standardizing the installation and access to Lisp library packages. It is based on a set of conventions, initialization files and scripts.

This is the Common Lisp Controller specification. The first version of CMU CL with support for this proposal is 2.5.0 for Debian Linux.

Included with permission.

Installing CMU CL 18c on Red Hat Linux 7.0
Jerry Gregg -- February 13, 2001
[ASCII]
A short step-by-step guide to installing and configuring CMU CL 18c on Red Hat Linux 7.0. Although the description is based on version 18c and Red Hat Linux, it probably applies to later versions of CMU CL and other Unix systems. If you have Debian Linux, see CMU Common Lisp on Linux.

This article was originally posted to the comp.lang.lisp newsgroup (Subject: cmucl on linux (redhat 7.0) easy install.).

Included with permission.

Location of the documentation included with the Debian Linux port
Peter Van Eynde -- May 1999
[ASCII]
A short note on the location of the documentation files included with the Debian Linux port. It also explains how to install the Common Lisp HyperSpec within the directory hierarchy.

This document is in the public domain.

Location of the files included with the Debian Linux port
Peter Van Eynde -- May 1999
[ASCII]
A list of the locations where the components of the CMU CL Debian Linux port distribution are installed.

This document is in the public domain.

[Contents]

Editors

Documents in this subsection explain how to use Hemlock, the editor which comes with CMU CL, or to interact with CMU CL through Emacs.

Hemlock User's Manual
Bill Chiles, Robert MacLachlan
[PostScript]
Hemlock is the integrated editor which comes with CMU CL. It follows the tradition of early versions of Emacs and of the Lisp Machine editor ZWEI.

This manual explains how to edit Lisp source code, evaluate it and interact with the Lisp system, manage multiple windows, obtain documentation, perform simple customizations, and more. Since Hemlock is written in Lisp, the user can extensively customize it and add new features. For learning how to do it see the command implementor's manual.

Included with permission.

Notes on using Hemlock
Peter Van Eynde -- May 1999
[ASCII]
This note provides basic information for starting and exiting a session with Hemlock, the integrated editor included with CMU CL. For an in-depth discussion of Hemlock's features see its user manual.

This document is in the public domain.

Notes on using ILISP
Peter Van Eynde -- February 2001
[ASCII]
ILISP is an Emacs major mode for interacting with inferior Lisp processes. Besides telling where to find ILISP, this note explains how to configure Emacs to work with ILISP and lists its main commands.

This document is in the public domain.

[Contents]

CLOS and PCL

Information and tips for using PCL, the CLOS implementation which comes with CMU CL.

Comments on some PCL benchmarks
Pierre R. Mai -- December 8, 2000
[ASCII]
In this article, originally posted to the comp.lang.lisp newsgroup (Subject: Re: Are there "constructors" in CLOS?), the author provides some details on the performance of a large simulation toolkit written with CMU CL, whose PCL implementation outperformed all the alternative implementations he tried. Some data on benchmarks of PCL with the CLISP implementation of CLOS are also included.

Included with permission.

Experience with the performance of PCL
Pierre R. Mai -- March 23, 2000
[ASCII]
This message, originally posted to the cmucl-imp mailing list (Subject: Re: Spurious range warnings), briefly tells the author's experience with benchmarking the CLOS implementation of CMU CL, PCL, with other CLOS implementations. He used for this both micro-bencharks and large applications for production use.

Included with permission.

Possible origin of the impressions on PCL's performance
Pierre R. Mai -- October 28, 2000
[ASCII]
In this article, originally posted to the comp.lang.lisp newsgroup (Subject: Re: Can I use Lisp?), the author speculates on the possible origin of the impressions on the poor performance of PCL, the CMU CL implementation of CLOS.

Included with permission.

Some thoughts on the performance of PCL
Pierre R. Mai -- November 12, 1999
[ASCII]
An experienced user summarizes the main areas where PCL is slower than commercial implementations. He also mentions some user-visible areas of the integration of PCL with CMU CL. This email message was originally sent to the X3J13 mailing list (Subject: Re: Core Lisp).

Included with permission.

Tips for using PCL and its Metaobject Protocol
Pierre R. Mai -- December 8, 1999
[ASCII]
This article, originally posted to the comp.lang.lisp newsgroup (Subject: Re: MOP/pcl anomaly in CMUCL?), provides some tips for using PCL symbols and the MOP (Metaobject Protocol).

Included with permission.

[Contents]

Multi-processing via Threads (x86 port only)

The documents grouped in this subsection summarize the CMU CL multi-processing facilities, currently available only on the x86 port and still under development, based on threads.

Locks
CLIM developers -- CLIM 2.0 User's Guide; October 1998 (last update January 12, 1999)
[Online version]
CMU CL provides a multi-processing extension via threads, currently available only on the x86 port, based on the model implemented by the CLIM graphical user interface manager for Common Lisp.

This document, available at the Web site of Xanalys, is the section of the CLIM manual that illustrates the functions for creating and holding locks (mutexes). CMU CL, however, does not support the functions for managing recursive locks (make-recursive-lock and with-recursive-lock-held) mentioned in the manual.

Copyright © 1995-1999 Harlequin Group plc. All rights reserved.

Note that the EncyCMUCLopedia includes just a link to this document, not the document itself.

Multi-Processing
CLIM developers -- CLIM 2.0 User's Guide; October 1998 (last update January 12, 1999)
[Online version]
CMU CL provides a multi-processing extension via threads, currently available only on the x86 port, based on the model implemented by the CLIM graphical user interface manager for Common Lisp.

This document, available at the Web site of Xanalys, is the section of the CLIM manual that illustrates the functions for creating, destroying, accessing and waiting for processes. Notice that CMU CL provides other functions not discussed in the document, and that its code base is not too interrupt safe yet. The interrupt safety on the x86 port, however, is improving.

Copyright © 1995-1999 Harlequin Group plc. All rights reserved.

Note that the EncyCMUCLopedia includes just a link to this document, not the document itself.

[Contents]

Distributed and Network Programming

This subsection includes documents that deal with using CMU CL for network programming and developing distributed applications.

CORBA, GNOME, CMUCL, and other macabre tales
Daniel Barlow -- May 15, 2000
[HTML] [Online version]
A description of how to call GNOME CORBA servers from CMU CL. The document illustrates a worked out example with the GNOME Help Browser.

This document is in the public domain.

CORBA in five minutes
Daniel Barlow -- May 3, 2000
[HTML] [Online version]
Background material on CORBA that complements CORBA, GNOME, CMUCL and other macabre tales.

This document is in the public domain.

[Contents]

X Window Interface

This subsection collects documents about programming with CLX and the Motif Toolkit, the low and high level CMU CL interfaces to the X Window system.

CLM -- A Language Binding for Common Lisp and OSF Motif
User Guide and reference Manual

Andreas Bäcker, Thomas Berlage -- January 16, 1992
[PostScript]
CLM is a Common Lisp interface to the OSF Motif X Window toolkit. It allows Common Lisp programs to use Motif widgets for their user interface.

This is both a user guide and a reference manual for CLM. It explains how to access CLM, write and debug applications, instantiate widgets and handle input events. Be sure to check the differences of the CMU CL Motif Toolkit Interface from CLM summarized in the design notes on the Motif interface. You may also need to refer to the CLX manual for low-level graphics functions needed for drawing into widgets.

Copyright 1992 GMD (German National Research Center for Computer Science)

Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of GMD not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. GMD makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.

GMD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL GMD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

CLX Common Lisp X Interface
Keith Cessna, Kerry Kimbrough, Mike Myjak, LaMott Oren, Dan Stenger -- 1989
[PostScript] [PDF] [Online version]
This is the reference manual of CLX, the Common Lisp interface to the X Window system supported by CMU CL. CLX is at the same level of abstraction of the Xlib library, which is the lowest level API accessible to application programmers. For a higher level layer, see the CMU CL Motif Toolkit Interface.

The manual describes all the functions for performing primitive graphics operations and managing input events. It is assumed that the reader is familiar with Xlib.

© 1988, 1989 Texas Instruments Incorporated

Permission is granted to any individual or institution to use, copy, modify and distribute this document, provided that this complete copyright and permission notice is maintained, intact, in all copies and supporting documentation. Texas Instruments Incorporated makes no representations about the suitability of this document or the software described herein for any purpose. It is provided "as is" without express or implied warranty.

CMUCL Motif Toolkit
CMU CL developers
[PostScript]
CLM is a Common Lisp interface to the OSF Motif X Window toolkit. CMU CL supports a similar interface, the Motif Toolkit Interface, which is based on a server that provides Lisp clients with access to Motif functions through remote procedure call facilities.

This document explains how to start the server, connect to it and invoke Motif functions. Be sure to check the differences with CLM summarized in the design notes on the Motif interface. For more information on CLM programming, see the CLM manual.

This document is in the public domain.

[Contents]

Implementor Documentation

The documentation grouped in this section, which covers advanced topics, is meant for CMU CL implementors. In this context implementors are experienced Common Lisp programmers who are interested in contributing to the development of CMU CL, building the system from source or understanding how it works.

System Internals

Documents in this subsection discuss the design and implementation of the CMU CL system, its compiler and runtime libraries.

CMU Common Lisp Memory Layout under New Type Scheme
David B. McDonald -- 1991
[PostScript]
This document describes possible memory layouts for CMU CL under Mach and Unix systems. It discusses memory maps and segment organizations, stack layouts, storage management and image dumping.

This document is in the public domain.

Design of CMU Common Lisp
Robert MacLachlan (editor) -- 1994 (last modified August 1999)
[PostScript]
This is the main resource for developers interested in extending CMU CL or understanding how it works. The document, which is still in draft form, discusses internal details of the compiler and run-time system. It describes the general architecture of the compiler, internal representation issues, code generation, optimizations and retargeting. Concerning the run-time system, object representation and memory management are also discussed.

Included with permission.

General information on CMU CL 2.4.13 for Debian Linux
Peter Van Eynde -- May 1999
[ASCII]
A short note on some differences of the Debian Linux port with previous versions.

This document is in the public domain.

Hemlock Command Implementor's Manual
Bill Chiles, Robert MacLachlan -- February 1992
[PostScript]
Hemlock is the integrated editor which comes with CMU CL. It follows the tradition of early versions of Emacs and of the Lisp Machine editor ZWEI. Since Hemlock is written in Lisp, the user can extensively customize it and add new features.

The manual illustrates the functions, macros and data structures needed for modifying existing commands or adding new ones. For learning how to use Hemlock for editing Lisp source code, see the user's manual.

Included with permission.

Notes on Global Optimization
Robert MacLachlan -- January 23, 2001
[ASCII]
This message, originally posted to the cmucl-imp mailing list (Subject: Re: Non Vector SIMPLE Arrays.), provides information on global optimization motivated by a discussion on array implementation. It deals with reaching definitions, loop invariants and common subexpression elimination.

Included with permission.

Notes on the Implementation of the Compiler
Robert MacLachlan -- January 23, 2001
[ASCII]
This message, originally posted to the cmucl-imp mailing list (Subject: Re: Non Vector SIMPLE Arrays.), collects miscellaneous notes on the implementation of the compiler. Among the discussed topics are compilation phases, various kinds of analysis, intermediate code representation, optimizations, types and virtual operations.

Included with permission.

Outline of Design of CMU Common Lisp
Robert MacLachlan -- 1994
[ASCII]
This is the outline of the manual describing the internal design of CMU CL. The outline may be useful for undesrtanding the completion status of various sections and evaluating the accuracy of the information they present.

This document is in the public domain.

Representation of data types
Robert MacLachlan
[ASCII]
This document illustrates the internal representation of primitive data types and how garbage collection deals with them.

This document is in the public domain.

TODO list for Hemlock
CMU CL developers
[ASCII]
This is a list of the features CMU CL developers planned to add to the integrated editor Hemlock. For some of the features, suggestions for implementation are provided. The document also discusses interesting ideas for which more thought is required. Refer to the user's manual for more information about Hemlock.

This document is in the public domain.

TODO list for the Debian Linux port of CMU CL
Peter Van Eynde -- May 1999
[ASCII]
A short note listing some of the improvements that the Debian Linux port maintainer plans to add to the distribution.

This document is in the public domain.

[Contents]

MIPS Architecture Support

The documents grouped in the entries below discuss the CMU CL compiler support for the MIPS processor architecture.

MIPS register usage
CMU CL developers
[ASCII]
A table illustrating how CMU CL uses the registers of a MIPS CPU.

This document is in the public domain.

Notes on MIPS calling conventions
Robert A. MacLachlan -- February 7, 1990
[ASCII]
This note describes the calling conventions followed by the various kinds of function calls.

This document is in the public domain.

Random notes on MIPS specific issues
Chris Hoover -- March 2, 1990
[ASCII]
This note describes functions used by the back-end of the CMU CL compiler for the MIPS architecture.

This document is in the public domain.

[Contents]

Build Process and Porting

Here you will learn how to build a running CMU CL system from source or port it to new architectures.

Building the Debian Linux port
Peter Van Eynde -- May 1999
[ASCII]
A short note with instructions for building the Debian Linux port from the Debian CMU CL sources. Note that, unlike other ports, the build process of the Debian one is based on a makefile.

This document is in the public domain.

CMU CL Compilation howto
Paul Werkowski -- July 2000
[ASCII] [Online version] [Additional online material]
Compiling CMU CL from source is tricky both because the system, being based on a self-compiler (a compiler written in its own language), requires an already running CMU CL system, and because it interacts in complicated ways with the build environment.

The CMU CL Compilation howto, which is currently out of date, explains the compilation process and some of the custom scripts it's based on. The README file mentioned in the note at the beginning of the document is CMU CL compilation steps.

If you use the Debian Linux port, check its simpler compilation procedure.

This document is in the public domain.

CMU CL compilation steps
Martin Cracauer -- July 2000
[ASCII] [Online version] [Additional online material]
This document lists and explains the shell commands that a user has to issue for building CMU CL from source. For more information on compiling the system, see the compilation howto.

This document is in the public domain.

CMU CL PowerPC Port Notes
Gary Byers -- February 2001
[ASCII]
Around 1997 Gary Byers ported CMU CL, with sources from a prerelease of the 18a branch, to the PowerPC architecture under MkLinux DR3 (the kernel was probably 2.0.32, with a pre-glibc libc snapshot that had been ported to the PowerPC). These notes from that project deal with memory addresses, Lisp kernel and signal handling, Unix interface, backend issues and more. They are useful to developers interested in reviving the port.

Gary's compiler code has been integrated into the main CMU CL source tree and updated for changes since it was written. The C code and some of the supporting Lisp code has not been integrated yet, and it may need some work before it can run.

Included with permission.

Compilation Order for Hemlock
CMU CL developers
[ASCII]
This document provides an ordered list of the Hemlock subsystems suitable for compiling it from source. Hemlock is the integrated editor included with CMU CL. For more information refer to the user's manual.

This document is in the public domain.

Glibc2 support in the Debian Linux port
Peter Van Eynde -- February 2001
[ASCII]
This short note lists the versions of glibc 2.x supported under Linux.

This document is in the public domain.

How SBCL Was Derived From CMU CL
William Harold Newman -- sbcl-0.5.0 (December 1999)
[ASCII]
SBCL (Steel Bank Common Lisp) is an experimental system derived from CMU CL which can build itself from scratch, requiring only ANSI Common Lisp as a cross-compilation host. This document, which is intended for developers who are familiar with the guts of CMU CL, is an overview of the changes made to CMU CL in order to produce SBCL.

Included with permission.

Integration of the Debian port with the CVS tree
Peter Van Eynde -- May 1999
[ASCII]
A note explaining how to update the source tree of the Debian Linux port with files coming from the main CMU CL CVS tree.

This document is in the public domain.

Outline of the steps for porting CMU CL to Win32
Pierre R. Mai -- February 23, 2001
[ASCII]
An outline of the steps for porting CMU CL to the Win32 environment, with some comments on the use of the Cygwin Unix emulation libraries. Most of this information may also be useful for planning other ports.

This message was originally posted to the cmucl-help mailing list (Subject: Re: Bootstrapping).

Included with permission.

Porting SBCL to "new" architectures
Daniel Barlow -- May 2001
[ASCII]
An account of the work done by the author for reintroducing the Alpha support that was dropped from SBCL when it split from CMU CL. It covers required files, features, package changes, renamed functions, special variables and constants, evaluation time, the genesis process, register usage, the memory map, signals, traps, pseudo-atomic sections, garbage collection, the debugger and other issues. These notes may be useful also for porting CMU CL.

This document is in the public domain.

[Contents]

CLOS and PCL

The documents in this subsection deal with the design and implementation of CLOS under CMU CL.

PCL release notes
PCL developers
[ASCII]
PCL (Portable Common Loops) is the CLOS implementation which comes with CMU CL. The following notes provide information about specific releases of PCL. They discuss missing or new features, potential problems and bugs, and differences with previous releases. Next to each link is the version code name of PCL, if available, to which the notes apply.

The following copyright and license applies to each of the PCL release notes:

Copyright (c) 1985, 1986, 1987, 1988, 1989 Xerox Corporation. All rights reserved.

Use and copying of this document is permitted. Any distribution of this document must comply with all applicable United States export control laws.

The abstract LAP code of PCL
Gregor Kiczales -- October 26, 1989
[ASCII]
The PCL abstract LAP code interface is a mechanism for providing PCL, the CMU CL implementation of CLOS, with a way to create high-performance method-lookup functions. Any port of PCL is required to implement this interface.

This document discusses the advantages of the LAP code interface and illustrates important meta-types, vector indexing, optimization issues and port specific functions. It finally describes the LAP code itself and includes a few examples.

Copyright (c) 1985, 1986, 1987, 1988, 1989 Xerox Corporation. All rights reserved.

Use and copying of this document is permitted. Any distribution of this document must comply with all applicable United States export control laws.

The Art of the Metaobject Protocol
Chapters 5 and 6

Gregor Kiczales, Jim des Rivieres, Daniel G. Bobrow -- 1991
[PostScript]
The CMU CL implementation of CLOS is based on PCL, a popular portable CLOS implementation developed by a group of Xerox PARC researchers led by Gregor Kiczales. They described PCL in the book The Art of the Metaobject Protocol (MIT Press, 1991 -- ISBN 0-262-61074-4).

The document included here is the part of the book -- chapters 5 and 6 -- dealing with the PCL Metaobject Protocol (MOP). The MOP is an object-oriented programming interface to the implementation and behavior of the PCL object system. Those chapters present the system's metaobject classes and their generic functions and methods.

© Copyright 1991 MIT Press.

The authors of the book write:

To this end, for Part II only (chapters 5 and 6), we grant permission to prepare revisions or other derivative works including any amount of the original text. We ask only that you properly acknowledge the source of the original text and explicitly allow subsequent revisions and derivative works under the same terms. To further facilitate improvements in this work, we have made the electronic source for these chapters publicly available; it can be accessed by anonymous FTP from the /pcl/mop directory on arisia.xerox.com.

The address of the FTP site mentioned by the authors is no longer valid. The current one is ftp://parcftp.xerox.com/pub/pcl/mop/.

[Contents]

X Window Interface

Documents in this subsection discuss the design and implementation of the CMU CL interfaces to the X Window system.

General Design Notes on the Motif Toolkit Interface
CMU CL developers
[PostScript]
CLM is a Common Lisp interface to the OSF Motif X Window toolkit. CMU CL supports a similar interface, the Motif Toolkit Interface, which is based on a server that provides Lisp clients with access to Motif functions through remote procedure call facilities.

This document discusses low level issues of the toolkit interface such as packet formats, object representation and server structure. The document also summarizes the differences with CLM. For more information about toolkit programming, see the instructions for accessing the toolkit and the CLM manual.

This document is in the public domain.

[Contents]