Dear all,

I am coding a (very) small hash consing library for clojure.

For those we don't happen to know what hash consing is, it is a way of
allowing equal data structures to be shared in memory.
This leverages the purity (as in "immutability") of data structures to
reduce memory footprint (no duplication of data for just a constant
overhead per allocation) and makes hashing and equality tests faster.
(You can use java non overloaded hashCode, and == to test equality,
because of the sharing. So both operations are O(1), with a very small
constant, whatever is the complexity of the hash consed data
structures.)
This can then be used, in combination with referential transparency to 
make memoized function faster.

I have a java file and a clojure interface that seem to work, at least
on my example. I plan to put something somewhere someday, but before
spending too much time in making this releasable, i Have a few
questions:

- does something already exists in contrib that I have missed?
- is someone else working on that?
- are there any "features that I need and that you must implement" that
you think of?

My current plans are:
- using a java concurrent hash map to soft referenced objects for the
hash consing table.
- only two fields in an hash consed object: the value it represents, 
  and a generic field called "cached_data" used to store anything you
want to memoize about this data structure. (Keeping this cached data a
bit longer is the reason I plan to use soft references and not weak
references)

I am not a clojure expert and I am not a java coder at all, so don't
hesitate to tell me if my plans are somehow wrong. 

Bets regards,

Nicolas.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to