Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Version 0.1.17: add some list functions and replace persistent lists by persistent btrees for non-unique slot indexes.
Version 0.1.16: improved performance by decreasing persistent consing for btrees and using a lazy-cache. Fixed some small bugs. Added a few handy functions and macros. In detail: Added P-PUSH and P-POP. Improved btree efficiency by switching to a different data structure for the bindings. Instead of using a persistent cons for each key/ value pair, we now put the keys and values directly into the bnode vector. This speeds up most btree operations because it reduces persistent consing when adding new values and it reduces indirections when searching for keys. Renamed BTREE-NODE to BNODE, BTREE-NODE-INDEX to BNODE-BINDINGS, BTREE-NODE-INDEX-COUNT to BNODE-NR-BINDINGS, FIND-BINDING-IN-NODE to FIND-KEY-IN-NODE. Fix a missing argument bug in REMOVE-CLASS-INDEX. Added a LAZY-CACHE which just clears the entire hash table whenever the cache gets full. This improves memory usage, because the normal cache queue kept track of a lot of objects that for some reason couldn't be cleaned up by the implementation's garbage collector. Added the convenience macros RUCKSACK-DO-CLASS and RUCKSACK-DO-SLOT. Made RUCKSACK-DELETE-OBJECT an exported symbol of the RUCKSACK package. Fix a bug in TEST-NON-UNIQUE-BTREE: it should call CHECK-NON-UNIQUE-CONTENTS instead of CHECK-CONTENTS.
Version 0.1.15. Fixed a garbage collector bug reported by Sean Ross. When the garbage collector deletes object ids from the object table (because the objects are dead and we may want to reuse their ids later for other objects), it should also remove that object from the cache. If it doesn't, there's a possibility that the object id will be reused later for a new object and the cache wil still refer to the old in-memory object.
Version 0.1.13: Add Brad Beveridge's basic unit test suite (modified to work with lisp-unit instead of 5am). Add Chris Riesbeck's lisp-unit library to help with creating unit test suites.
Version 0.1.5: removed ^M line terminators from all source files (thanks to Attila Lendvai).
Take care of some differences between the MOP implementations of Lispworks and SBCL. Lispworks doesn call (SETF SLOT-VALUE-USING-CLASS) in SHARED-INITIALIZE, but SBCL does. Lispworks calls FINALIZE-INHERITANCE after a class is redefined and a new instance is created, but SBCL doesn't. All tests now work for Lispworks (5.0) and SBCL (0.9.16). Some work on a copying GC.
Handle updates of in-memory persistent objects by writing a method for Lispś UPDATE-INSTANCE-FOR-REDEFINED-CLASS that marks the object as dirty and calls Rucksack's UPDATE-PERSISTENT-INSTANCE-FOR-REDEFINED-CLASS.
Get rid of the Lispworks specific PROCESS-A-SLOT-OPTION stuff and handle the slot options in a way that's compatible with AMOP. Remove INITARGS argument for UPDATE-PERSISTENT-INSTANCE-FOR-REDEFINED-CLASS, because it turns out to be unnecessary (see details in notes.txt) Add explanation to test-index-1a.lisp about the use of (eval-when (:compile-toplevel :load-toplevel :execute) ...) Replace *RUCKSACK* by RS in the test-*.lisp files.
Add test cases for schema updates and user defined methods of UPDATE-PERSISTENT-INSTANCE-FOR-REDEFINED-CLASS. Indexing: compare the specified slot/class indexes to the indexes that exist in the rucksack, *not* to the indexes specified in the previous version of the class definition. Otherwise we get inconsistencies when we recompile class definitions from scratch with a rucksack that already exists.
- FINALIZE-INHERITANCE: compute slot diffs for obsolete schemas. - More work on UPDATE-PERSISTENT-INSTANCE-FOR-REDEFINED-CLASS.
Partial implementation of UPDATE-PERSISTENT-INSTANCE-FOR-REDEFINED-CLASS and friends.
Some work on schema updates. Example 1: indexing should still work after recompiling. RUCKSACK-UPDATE-SLOT-INDEXES: remove indexes for old slots that don exist anymore. Compute persistent slots at the right moment.
Make sure that indexing works correctly with subclasses. Fix some more indexing bugs.
The class and slot indexes were normal hash tables, but they should be persistent objects like everything else: I replaced them by btrees. Get PROCESS-LOCK and PROCESS-UNLOCK working on SBCL (thanks to Geoff Cant).
Do a FINISH-OUTPUT at the end of a transaction commit (suggested by Marco Baringer). Add :KEY-KEY and :VALUE-KEY initargs to btrees. Add some standard slot indexes. Add :UNIQUE initarg for persistent slots (not finished yet).
Add a SERIAL-TRANSACTION-RUCKSACK-CLASS that allows for only one transaction at a time (by using a transaction lock). Don't do any GC at all while a transaction is writing objects to disk. Instead we keep track of the amount of disk space allocated by the committing transaction. Then we do a (partial) GC immediately after committing the transaction.
Fix bugs in BTREE-DELETE and SPLIT-BTREE-NODE. Rename BTREE-DELETE to BTREE-DELETE-KEY and implement BTREE-DELETE for btrees with non-unique keys. Add stress test for btrees. Implement the :MIN, :MAX, :INCLUDE-MIN, :INCLUDE-MAX and :ORDER arguments for BTREE-MAP. Add some more CL mirror functions like P-MAPCAR, P-MAPC, P-DELETE-IF, etcetera.
Clean up btree code. Add BTREE-DELETE. (From Edi Weitz.)
Fixed enough garbage collector bugs to get the TEST-CREATE, TEST-LOAD and TEST-UPDATE functions running.
Let CACHE-TOUCH-OBJECT have an object instead of an object-id as parameter. (From Nikodemus Siivola.)
Some trivial CVS header changes.
Created Rucksack CVS repository on common-lisp.net.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|