LISP and Symbolic Computation, 10(1)5-38

UCL+P -- Defining and Implementing Persistent Common Lisp

J. H. Jacobs, Mathematical Sciences Department, University of Alaska, Anchorage, Anchorage, AK 99508
M. R. Swanson, Department of Computer Science, University of Utah, Salt Lake City, UT 84112.

Abstract: The Persistent Lisp language was defined and an implementation, UCL+P, 1 was designed and constructed. Persistent Lisp is a superset of Common Lisp which fully supports the development of programs manipulating persistent data while maintaining Lisp semantics across the storage/retrieval of values. Persistence features provided are concurrent atomic transactions, demand loading of values, and transparent load and store of persistent values.

All Common Lisp data types (with the exception of streams) can be made persistent. Nonsymbolic values are initially created as transient values on the runtime heap. When a transaction completes, transient values which are reachable from a persistent symbol become persistent. The package mechanism has been extended to add a persistence attribute to packages. When symbols are interned in a package with the persistence attribute, they become persistent, as do values reachable from them.

UCL+P was created to support these features, by making extensive low-level modifications to the UCL compiler and runtime system. A new runtime data structure, the indirection vector, was created to support the relocation of newly persistent values from the runtime heap to the persistent heap.

Keywords: Persistence, Persistence Programming, Persistent Languages, Persistent Lisp

This article can be downloaded [here].
[picture of journal cover]

June 2003 - hosc@brics.dk