Rucksack Fandom #
hacking, May 13th 2006
Arthur Lemmens presented his work-in-progress persistence system (layer? framework? library?) Rucksack in ELCM 2006. Key features: portable Common Lisp, persistence of CLOS objects, indexes, transaction support, garbage collected (no DELETE-INSTANCE, no dangling object-ids), open source.
I've made an initial port of Rucksack (originally developed on Lispworks and ACL) to SBCL:
(defclass foo () ((bar :initarg :bar :reader bar-of)) (:metaclass persistent-class)) => #<PERSISTENT-CLASS FOO> (defmethod print-object ((foo foo) stream) (print-unreadable-object (foo stream :type t) (princ (bar-of foo) stream))) => #<STANDARD-METHOD PRINT-OBJECT (FOO T) {ADC0519}> (with-rucksack (r "/tmp/foosack/") (with-transaction () (dotimes (i 5) (add-rucksack-root (make-instance 'foo :bar i) r)))) => T (with-rucksack (r "/tmp/foosack/") (with-transaction () (print (rucksack-roots r)))) =| (#<FOO 0> #<FOO 1> #<FOO 2> #<FOO 3> #<FOO 4>)
Not the most impressive of demos yet, but enough to show that the bare bones are in working order.
Rucksack is under 1-clause MIT licence, currently available from Arthur Lemmens on request — and as said it is still work-in-progress, not ready for actual use yet.
Cool stuff: much kudos to Arthur!