Version 0.9.0
[ocaml-ancient.git] / README.txt
index 67bf422..e2d9103 100644 (file)
@@ -1,6 +1,5 @@
 'Ancient' module for OCaml
 ----------------------------------------------------------------------
-$Id: README.txt,v 1.2 2006-10-09 12:18:05 rich Exp $
 
 What does this module do?
 ----------------------------------------------------------------------
@@ -67,6 +66,9 @@ uses the Ancient module:
 Example
 ----------------------------------------------------------------------
 
+XXX Note the example code is really stupid, and fails for large
+dictionaries.  See bug (10) below.
+
 Run:
 
   ulimit -s unlimited
@@ -133,11 +135,7 @@ data to OCaml heap data.  In theory it should be possible to modify
 ancient data to point to other ancient data, but we have not tried
 this.
 
-(5) You can store more than just one compound object per backing file
-by supplying a key to Ancient.share and Ancient.get.  The keys are
-integers in the range [0..1023].  The upper limit is hard coded into
-the mmalloc library.  This hard coded upper limit is a bug which
-should be fixed.
+(5) [Limit on number of keys -- issue fixed]
 
 (6) [Advanced topic] The _mark function in ancient_c.c makes no
 attempt to arrange the data structures in memory / on disk in a way
@@ -192,6 +190,11 @@ which avoids loading unused fields at all.  In some circumstances we
 have shown that this could make a huge difference to performance, but
 we are not sure how to implement this cleanly in the current library.
 
+[Update: I have fixed issue 6 manually for my Weblogs example and
+confirmed that it does make a huge difference to performance, although
+at considerable extra code complexity.  Interested people can see the
+weblogs library, file import_weblogs_ancient.ml.in].
+
 (7) [Advanced topic] Certain techniques such as Address Space
 Randomisation (http://lwn.net/Articles/121845/) are probably not
 compatible with the Ancient module and shared files.  Because the
@@ -236,6 +239,13 @@ they are OK.
 
 The solution to this bug is non-trivial.
 
+(10) Example code is very stupid.  It fails with large dictionaries,
+eg. the one with nearly 500,000 words found in Fedora.
+
+(11) In function 'mark', the "// Ran out of memory.  Recover and throw
+an exception." codepath actually fails if you use it - segfaulting
+inside do_restore.
+
 Authors
 ----------------------------------------------------------------------