UCL+P—Defining and Implementing Persistent Common Lisp

  • Authors:
  • J. H. Jacobs;M. R. Swanson

  • Affiliations:
  • Mathematical Sciences Department, University of Alaska, Anchorage, Anchorage, AK 99508. E-mail: afjhj@uaa.alaska.edu;Department of Computer Science, University of Utah, Salt Lake City, UT 84112. E-mail: swanson@cs.utah.edu

  • Venue:
  • Lisp and Symbolic Computation
  • Year:
  • 1997

Quantified Score

Hi-index 0.00

Visualization

Abstract

The Persistent Lisp language was defined and an implementation,UCL+P, 1 was designed andconstructed. Persistent Lisp is a superset of Common Lisp which fullysupports the development of programs manipulating persistent datawhile maintaining Lisp semantics across the storage/retrieval ofvalues. Persistence features provided are concurrent atomictransactions, demand loading of values, and transparent load andstore of persistent values.All Common Lisp data types (withthe exception of streams) can be made persistent. Nonsymbolic valuesare initially created as transient values on the runtime heap. When atransaction completes, transient values which are reachable from apersistent symbol become persistent. The package mechanism has been extended to add a persistence attribute to packages. Whensymbols 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 newruntime data structure, the indirection vector, was created to supportthe relocation of newly persistent values from the runtime heap to thepersistent heap.