This message announces the availability of wb-2a3. "WB" is a disk based (sorted) associative-array package with C, SCM, Java, and C# libraries. These associative arrays consist of variable length (0.B to 255.B) keys and values. Functions are provided to: * create, destroy, open and close disk-files and associative arrays; * insert, delete, retrieve, find next, and find previous (with respect to dictionary order of keys); and * The atomic `put' and `rem' operations allow associations to be used for process mutexs. * apply functions, delete, or modify values over a range of consecutive key values. The (database) disk files interoperate between the various language libraries. The interface to the SCM Scheme implementation supports longer data values and SLIB relational databases. The WB implementation has a file size limit of 2^32 * block size (default 2048.B) = 2^43 bytes (8796.GB). WB routinely runs with databases of several hundred Megabytes. WB does its own memory and disk management and maintains a RAM cache of recently used blocks. Multiple associative arrays can reside in one disk file. Simultaneous access to multiple disk files is supported. A structure checking and garbage collecting program and a viewer are provided. Compiled, WB occupies approximately 66 kilobytes. WB is implemented using a variant of B-tree structure. B-trees give slower access than hashing but are dynamic and provide an efficient determination of successor and predecessor keys. All operations are O(log(n)) in the size of the database. B-trees are commonly used by database systems for implementing index structures. B-trees are optimized for using the minimum number of disk operations for large data structures. Prefix and suffix key compression are used for storage efficiency in WB. WB is free software and part of the GNU project. It is released under the GNU Lesser General Public License (LGPL). Documentation and distributions in several formats are linked from WB's home page: http://people.csail.mit.edu/jaffer/WB.html Links to distributions of WB and related softwares are at the end of this message. -=-=- wb-2a3 news: * now operates with any number of open database files (segs). * now uses native mutexes: pthread_mutex on unix; Windows mutex in MSVC. * init-wb can now be called multiple times. * moved C source, objects, and programs into c subdirectory. * URLs updated. * bugs fixed. -=-=- * c: Moved C source, objects, and programs into c subdirectory. * scm2cs (schlep-let): Named let becomes just label; not while(true). * schlep (schlep1): Take optional destination directory as last arg. * schlep, scm2cs, scm2java: Using 'schlep' for all internal names eases porting improvements between compilers. * schlep: Removed 1st line "%0 %*" for MS-DOS scripting. * scm2java, java/*.java: Wrapped java '?' ifs with (). * scm2cs.typ (namespace): is now "wb". * scm2cs.typ, scm2java.typ (blkio:*): Corrected return types to boolean. * wbview (wbview): Fixed (had gone stale). * csharp/Test.cs, csharp/TestA.cs: Fixed test files. * benchmark.scm: Updated; changed to test creating 100 segs. * Makefile (scheck): Separated Scheme-check from check target. * test.scm, example.scm, csharp/Test.cs, java/Example.java: Don't close and reopen new segment. * c/wbsys.c, c/wbsys.h (_MSC_VER): Made 'lck's block own thread. * java/Lck.java, csharp/Cssys.cs: Made 'lck's self-blocking. * ents.scm (init-wb): Added check that 'lck's are self-blocking. * ents.c, segs.c, wbsys.c, wbsys.h: Locks are pthread_mutex on unix; Windows mutex in MSVC. * java/Lck.java: Supplied missing '\n's in error messages. * ents.scm, segs.scm: Reorganized lck numbering. * ents.scm (empty-blk, empty-blk-lck): Removed. * ents.scm (final-wb): Close segs before freeing ents. * segs.scm (make-seg): Fail if bt-open-new fails. (bt-open-new): Make repeated calls to try-get-free-ent rather than one call to get-free-free-ent. Fixes bug opening many segments. * c/db.c, c/segs.c, java/Segs.java, segs.scm (open-seg): Don't leave uninitialized seg in seg-chain when open-seg fails. * java/Ents.java, ents.c, ents.scm (init-wb): Return NOTPRES (-1) if already initialized. * ents.c, ents.scm, java/Ents.java, java/Segs.java, segs.c, segs.h, segs.scm, wb.info, wb.texi (init-wb): Don't err if called multiple times. * (segtab): Eliminated; segs are now allocated objects. * rwb-isam.scm (make-base): Don't reopen new segment. (open-base, write-base): Open-seg takes boolean third argument. * java/Blkio.java, blkio.c, blkio.scm (blkio:file-extend): Don't need to write block. -=-=- WB source is available from: http://swissnet.ai.mit.edu/ftpdir/wb-2a3.tar.gz WB source is available from: http://swissnet.ai.mit.edu/ftpdir/scm/wb-2a3.zip http://swissnet.ai.mit.edu/ftpdir/scm/wb-2a3-1.src.rpm Also available as i386 binary RPM: http://swissnet.ai.mit.edu/ftpdir/scm/wb-2a3-1.i386.rpm WB comes with an interface to the Scheme implementation SCM; and contains "wbtab.scm", SCM code allowing WB to implement SLIB relational databases. SCM source is available from: http://swissnet.ai.mit.edu/ftpdir/scm/scm-5e6.zip http://swissnet.ai.mit.edu/ftpdir/scm/scm-5e6-1.src.rpm Also available as i386 binary RPM: http://swissnet.ai.mit.edu/ftpdir/scm/scm-5e6-1.i386.rpm SLIB is a portable Scheme library which SCM uses: http://swissnet.ai.mit.edu/ftpdir/scm/slib-3b2.zip Also available as RPM: http://swissnet.ai.mit.edu/ftpdir/scm/slib-3b2-1.noarch.rpm