This file contains release notes for version 0.9 of Wood. New features since 0.8 ---------------------- There is the start of a transaction system. It doesn't do much yet, but the API exists, so you can start writing it into your code. See documentation for WITH-TRANSACTION in "wood.doc". p-make-load-function is deprecated. New code should use p-make-load-function-using-pheap. See "wood.doc". The btree code now uses binary search in each node. This makes it almost 3 times as fast. It is also more (disk) space efficient. Wood allow you to specify that some slots of a CLOS instance are to remain disk-resident until accessed. See the documentation for wood-disk-resident-slot-names & define-disk-resident-slots in "wood.doc". create-pheap & open-pheap now take :mac-file-creator and :external-format keywords that work like the same keyword args to open except that if an existing file's mac-file-type is not the same as the specified external-format, an error is signalled. New functions: p-loaded? & p-stored?. See "wood.doc". gc-pheap-file now takes an optional modify-input-file arg, default NIL. It used to write forwarding pointers into the pheap file and restore the old values on exit. It now does this only if modify-input-file is true. The default is to use a hash table to store the forwarding pointers. This makes it use more memory, but it doesn't modify the file and is noticeably faster. Wood works in the alpha version of MCL 3.0. MCL 3.0a4 requires a compiler patch in order to compile the file "recovery.lisp". Send mail to me (bill@cambridge.apple.com) if you need the patch. Later alphas will incorporate the patch. Mod Histories ------------- block-io-mcl.lisp ;; 03/13/95 bill byte-array-p and ensure-byte-array move here from "disk-cache-accessors.lisp" ;; byte-array-p updated to work in MCL 3.0. ;; Former lap uses of $v_subtype changed to calls of ensure-byte-array ;; 10/25/94 Moon without-interrupts -> with-databases-locked ;; 09/21/94 bill without-interrupts around part of %fread-bytes and %fwrite-bytes ;; 01/31/94 bill %fread-bytes & %fwrite-bytes support offsets > 64K and ;; will read/write more than just the first 512 bytes. btrees.lisp ;;; 02/06/95 bill Moon's idea to add binary search to %btree-search-node without ;;; changing the disk representation. That and doing the comparisons ;;; inline got speed improvement of a factor of 2.7 over the old linear ;;; search code. ;;; 12/16/94 bill Complete rewrite of the low-level insertion code. ;;; This fixes a bug found by Paul.Meurer@mi.uib.no and ;;; will make much easier the addition of binary search for nodes. ;;; 10/28/94 Moon Change without-interrupts to with-databases-locked. ;;; 10/25/94 bill (setf (p-btree-store ...) x) now returns x instead of its pptr. ;;; 09/21/94 bill without-interrupts as necessary for interlocking disk-cache-accessors.lisp ;; 03/13/95 bill byte-array-p & ensure-byte-array-p move to "block-io-mcl.lisp" ;; 10/28/94 Moon Change without-interrupts to with-databases-locked. ;; 10/03/94 bill (setf wood::read-8-bits) no longer fails when writing ;; less than 4 bytes from the end of the buffer. ;; 09/21/94 bill without-interrupts as necessary for interlocking disk-cache.lisp ;; 11/17/95 bill poor man's transactions. ;; open-disk-cache takes an :initial-transaction-p keyword. ;; If nil (NOT the default), errors on any disk writes that ;; happen outside of a start-disk-cache-transaction/commit-disk-cache-transaction ;; pair. ;; 11/03/94 ows open-disk-cache takes a mac-file-creator keyword, ;; which it passes on to open. ;; 10/28/94 Moon Change without-interrupts to with-databases-locked. ;; Remove interlocking from get-disk-page; callers must. ;; Add comment "Must be called inside with-databases-locked" ;; to with-locked-page. ;; 09/21/94 bill without-interrupts as necessary for interlocking ;; 07/26/94 bill get-disk-page allocates a new page if all the pages ;; are locked. Hence, it can't fail unless out of memory. wood:wood;load-wood.lisp ;; 01/17/95 bill export p-store-pptr, pptr-pointer, pptr-pheap, ;; with-transaction, start-transaction, commit-transaction, ;; abort-transaction ;; 11/02/94 ows export pptr, pheap-pathname ;; 10/25/94 bill export pptr-p, p-loaded?, p-stored?, ;; wood-disk-resident-slot-names, define-disk-resident-slots ;; 03/14/94 bill Don't push anything onto *module-search-path* persistent-clos.lisp ;; 11/02/94 bill (method %p-store-object (t standard-object t)) no longer ;; handles p-make-load-function-using-pheap. It has moved ;; into %p-store-internal now. ;; 10/28/94 Moon Change without-interrupts to with-databases-locked ;; 10/25/94 bill p-load-instance calls wood-disk-resident-slot-names, ;; a new GF that users can specialize. ;; define-disk-resident-slot-names macro to aid generation ;; of wood-disk-resident-slot-names methods and accessor ;; methods that will swap disk resident slots in when ;; necessary. ;; 09/21/94 bill without-interrupts as necessary for interlocking persistent-heap.lisp ;; 02/10/95 bill Binding of *loading-pheap* moves from p-load to pointer-load. ;; 01/17/95 bill poor man's transactions. ;; open-pheap takes an :initial-transaction-p keyword. ;; If nil (NOT the default), errors on any disk writes that ;; happen outside of a start-transaction/commit-transaction pair. ;; 12/09/94 bill Changes from fix-redefine-class-patch for Alpha 1 ;; %p-store-internal gets new descend value :store-slots-again ;; 11/16/94 bill flush-all-open-pheaps ignores errors and ensures that they ;; won't happen again. ;; 11/04/94 ows open-pheap & create-pheap take a mac-file-creator keyword, which ;; they pass on to open-disk-cache. ;; Add :mac-file-creator to *open-pheap-keywords*. ;; 11/02/94 bill Handling of p-make-load-function-using-pheap moves into ;; %p-store-internal and out of (method %p-store-object (t structure-object t)). ;; %p-store-object-body-with-load-function commented out. ;; Remove %p-store-hash-table and its call. ;; Optimize handling of NIL in %p-store-internal ;; 10/28/94 Moon Change without-interrupts to with-databases-locked ;; Remove interlocking from pheap-write-hook since it is only called ;; from inside of get-disk-page, which is already interlocked ;; 10/25/94 bill p-loaded?, p-maphash type checks its hash table arg. ;; initialize-vector-storage had an error in its first error call. ;; %p-store-uvector calls %p-store-hash-table for hash tables. ;; %p-store-hash-table saves hash tables without dumping ;; a copy of #'equal, #'equalp, or internal hash table functions. ;; p-load-load-function handles circularity correctly. ;; New macro: %p-store-object-body-with-load-function and ;; its helper function do-%p-store-object-body-with-load-function ;; 10/13/94 bill New variable: *preserve-lfun-info*. Pass it as second arg to split-lfun. ;; 10/12/94 bill typo in error message in initialize-vector-storage. ;; Thanx to Chris DiGiano for finding this. ;; 10/11/94 bill open-pheap works again if the file does not exist and ;; the :if-exists keyword is present. ;; 09/26/94 bill GZ's simplification t do-%p-store-object-body ;; 09/21/94 bill without-interrupts as necessary for interlocking ;; 09/19/94 bill New function: p-stored? ;; New macro: careful-maybe-cached-address. Use it in %p-store-object-body ;; to handle the case of a make-load-function-using-pheap returning ;; the same disk object for two different memory objects. ;; 07/18/94 bill (via derek) ;; Calls p-make-load-function-using-pheap instead of p-make-load-function. ;; p-make-load-function-using-pheap takes the pheap as an arg, so that it ;; can dispatch off its type. open-pheap takes a new :pheap-class keyword ;; to support this. The reason for this change is to allow different ;; persistent heap types to have different strategies for storing objects to disk. ;; 06/21/94 bill flush-all-open-pheaps removes a pheap from *open-pheaps* if ;; its stream is no longer open. ;; 03/10/93 bill create-pheap & open-pheap now take an :external-format keyword ;; (submitted by Oliver Steele) wood:wood;split-lfun.lisp ;; 10/13/94 gz optional preserve-lfun-info-p arg to split-lfun ;; 10/11/94 bill split-lfun no longer attempts to skip immediate map when ;; there is none. Thanx to Chris DiGiano for finding this one. wood-gc.lisp ;; 11/02/94 ows gc-pheap-file-internal takes keyword argument modify-input-file; ;; when true, calls make-forwarding-table instead of open-dc-log. ;; gc-pheap-file-internal copies the mac-file-creator from the input ;; file to the output file. ;; gc-pheap-file takes optional argument modify-input-file ;; gc-pheap-file only swaps files when the size is smaller. ;; new fns make-forwarding-table, forwarding-table-p ;; gc-write-forwarding-pointer, address-forwarded-p check whether ;; the log is a forwarding table. ;; new fns address-forwarded-p, read-forwarded-pointer replace ;; inlined versions of this code in callers. ;; gc-copy-pkg-symbols, gc-copy-ptr, gc-copy-cons-internal ;; call address-forwarded-p, read-forwarded-pointer. ;; 09/26/94 bill gc-copy-bytes uses addr+ instead of incf. ;; Thanx to Christopher T. Wisdo for finding this. wood:wood;wood.lisp ;; 03/09/94 bill wood::load-wood -> (find-symbol "LOAD-WOOD" :wood) wood:wood;woodequ.lisp ;; 01/18/95 bill $btree.max-key-size