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].
|
|