Next: Introduction, Previous: (dir), Up: (dir) [Contents][Index]
This is the clobber Reference Manual, generated automatically by Declt version 4.0 beta 2 "William Riker" on Wed Jun 15 04:15:01 2022 GMT+0.
Next: Systems, Previous: The clobber Reference Manual, Up: The clobber Reference Manual [Contents][Index]
Clobber is an alternative to so called "object prevalence", and in particular to cl-prevalence.
Clobber is both simpler, more flexible, and more robust than systems based on object prevalence.
It is simpler because we do not take any snapshots at all. Other systems typically use a combination of transaction logs and snapshots. Clobber uses only a transaction log which is always read into an empty system.
It is more flexible because the system itself does not define the format of a transaction. Client code can save transactions as Lisp lists, as instances of standard-object, or anything else that can be serialized. It is also more flexible because transactions can contain any object that can be serialized, including model objects. With this method, client code does not need to manipulate "manually created pointers" such as social security numbers, account numbers, membership numbers, etc. whenever it needs to execute a transaction. Instead it can use the model objects themselves such as people, accounts, automobiles and whatnot.
It is more robust because serialization of instances of (subclasses
of) standard-object
is not accomplished based on slots. Slots are
considered implementation details. In traditional systems, whenever
the model evolves, the serialization might no longer be valid. In
contrast, Clobber serializes instances of standard-object
as a list of
pairs, each one consisting of an initarg and a value. These pairs can
be handled by client code in any way it sees fit. They can be handled
by an :initarg
, by initialize-instance
, or they can be ignored. The
downside of the Clobber method is that client code must specify these
pairs in the form of an initarg and the name of an accessor function
to be called to obtain the value used for the initarg. This
inconvenience is however relatively minor, especially considering the
additional robustness it buys in terms of less sensitivity to changes
in the model classes.
At the heart of Clobber is a mechanism for serializing objects that preserves object identity, much like the reader macros #= and ##, except that Clobber detects sharing within the entire transaction log, not only within a single transaction. This mechanism is what makes it possible for client code to put any old object in a transaction, while making sure that sharing is preserved.
Clobber is in the public domain in countries where it is possible to place works in the public domain explicitly. In other countries, we will distribute Clobber according to a license that lets the user do whatever he or she pleases with the code.
Send comments to robert.strandh@gmail.com
A manual might be written one day.
(ql:quickload :clobber)
(in-package :clobber-demo)
(start "/path/to/new/file")
(do-things-1)
Next: Files, Previous: Introduction, Up: The clobber Reference Manual [Contents][Index]
The main system appears first, followed by any subsystem dependency.
Library for transaction-oriented data bases.
Robert Strandh <robert.strandh@gmail.com>
FreeBSD, see file LICENSE.text
Next: Packages, Previous: Systems, Up: The clobber Reference Manual [Contents][Index]
Files are sorted by type and then listed depth-first from the systems components trees.
Next: clobber/packages.lisp, Previous: Lisp, Up: Lisp [Contents][Index]
clobber (system).
Next: clobber/clobber.lisp, Previous: clobber/clobber.asd, Up: Lisp [Contents][Index]
clobber (system).
Next: clobber/demo.lisp, Previous: clobber/packages.lisp, Up: Lisp [Contents][Index]
packages.lisp (file).
clobber (system).
Next: clobber/demo2.lisp, Previous: clobber/clobber.lisp, Up: Lisp [Contents][Index]
clobber.lisp (file).
clobber (system).
Previous: clobber/demo.lisp, Up: Lisp [Contents][Index]
demo.lisp (file).
clobber (system).
Next: Definitions, Previous: Files, Up: The clobber Reference Manual [Contents][Index]
Packages are listed by definition order.
Next: clobber-demo2, Previous: Packages, Up: Packages [Contents][Index]
common-lisp.
Next: clobber, Previous: clobber-demo, Up: Packages [Contents][Index]
common-lisp.
Previous: clobber-demo2, Up: Packages [Contents][Index]
common-lisp.
Next: Indexes, Previous: Packages, Up: The clobber Reference Manual [Contents][Index]
Definitions are sorted by export status, category, package, and then by lexicographic order.
Next: Internals, Previous: Definitions, Up: Definitions [Contents][Index]
Next: Ordinary functions, Previous: Public Interface, Up: Public Interface [Contents][Index]
Previous: Public Interface, Up: Definitions [Contents][Index]
Next: Ordinary functions, Previous: Special variables, Up: Internals [Contents][Index]
Next: Generic functions, Previous: Macros, Up: Internals [Contents][Index]
Next: Classes, Previous: Ordinary functions, Up: Internals [Contents][Index]
automatically generated reader method
automatically generated reader method
automatically generated reader method
automatically generated reader method
automatically generated reader method
automatically generated reader method
automatically generated reader method
automatically generated writer method
automatically generated reader method
Previous: Generic functions, Up: Internals [Contents][Index]
:function-name
This slot is read-only.
clobber-demo2::*operator*
:creator
This slot is read-only.
(get-universal-time)
:creation-date
This slot is read-only.
Previous: Definitions, Up: The clobber Reference Manual [Contents][Index]
Jump to: | %
(
A B C D E F G H L M N O S T W |
---|
Jump to: | %
(
A B C D E F G H L M N O S T W |
---|
Next: Data types, Previous: Functions, Up: Indexes [Contents][Index]
Jump to: | %
*
S |
---|
Jump to: | %
*
S |
---|
Jump to: | A B C D F P S T |
---|
Jump to: | A B C D F P S T |
---|