Updated MANIFEST.
[ocaml-ancient.git] / README.txt
index 67bf422..e2d9103 100644 (file)
@@ -1,6 +1,5 @@
 'Ancient' module for OCaml
 ----------------------------------------------------------------------
 'Ancient' module for OCaml
 ----------------------------------------------------------------------
-$Id: README.txt,v 1.2 2006-10-09 12:18:05 rich Exp $
 
 What does this module do?
 ----------------------------------------------------------------------
 
 What does this module do?
 ----------------------------------------------------------------------
@@ -67,6 +66,9 @@ uses the Ancient module:
 Example
 ----------------------------------------------------------------------
 
 Example
 ----------------------------------------------------------------------
 
+XXX Note the example code is really stupid, and fails for large
+dictionaries.  See bug (10) below.
+
 Run:
 
   ulimit -s unlimited
 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.
 
 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
 
 (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.
 
 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
 (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.
 
 
 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
 ----------------------------------------------------------------------
 
 Authors
 ----------------------------------------------------------------------