One approach to implementing this, which I've also been thinking of for maintaining Bicicleta intermediate results, would be to use a value- weak
hashtable for the memoization table, along with a garbage collector.
Any value that is needed again while it's still in the nursery will not
need to be recomputed, but most values will be reaped because at the
time of the next minor collection, the only reference to them will be in the value-weak hashtable. A few won't be --- the ones whose values are
currently referenced from some parsing rule currently being tried ---
and those will be promoted.
...
I think this design may be useful for laziness in general, but I haven't
tried it yet, despite having come up with it a year or two ago.

A design that I'd like to try sometime would be to try an "Elephant"- like language, in which all values would, in principle, be recoverable from a logfile. This could eliminate GC, as frequently used values would tend to be instantiated in a cache, and values that are never referenced again would cost just their portion of storage, presumably amortized by bulk sequential i/o patterns.

Any idea how mutation rates compare for various workloads with main memory and/or disk bandwidths?

-Dave

--
To unsubscribe: http://lists.canonical.org/mailman/listinfo/kragen-discuss

Reply via email to