Thanks Levente. I will try both. Actually, I would also need a fast (or at least I would like to use #hash) IdentityDictionary apart from a IdentitySet ;)

On Mon, Dec 12, 2011 at 1:52 PM, Levente Uzonyi <leves@elte.hu> wrote:
On Mon, 12 Dec 2011, Levente Uzonyi wrote:

On Mon, 12 Dec 2011, Mariano Martinez Peck wrote:

Hi guys. I hope this is not a very stupid question. Background: in Fuel we
have a IdentityDictionary where we put each of the objects we find while
traversing the graph. We need to use IdentitySet because we cannot have
repetitions (and to avoid loops) so we NEED to use #==. In such dictionary
we put ALL objects of the graph, so it can be very big. Since IdentitySet
uses #identityHash, it means it will be using those ONLY 12 bits in the
object header. It means that we have 2^12 = 4096 �different values.

Question: �having explained the previous, I wanted to be able to use #hash
rather than #identityHash since several classes implement #hash and hence I
thought that using #hash I could have less colisions and hence a better
performance. I tried to make a subclass of IdentitySet that uses #hash
rather than #identityHash but my image freezes. I also tried something like:

set := PluggableSet new.
� set hashBlock: [ :elem | elem hash ].
� set equalBlock: [ :a :b | a == b ].

But it doesn't work either. I works with simple tests in a workspace but
when I run the full tests of Fuel, it enters in a loop in the method #hash
of Collection..

Anyway, my question is, should that work? if not, what is the exact reason?

If the serialized objects remain unchanged, then it can work. You can also give another IdentitySet implementation a try, e.g.:
http://leves.web.elte.hu/squeak/LargeIdentitySet.st .

You can also take a look at SystemTracer, because (IIRC) it uses an IdentitySet which will contain all objects at a point, and it's reasonably fast. IIRC the idea is to use the identityHash of the object mixed with the hash of its class to increase the number of bits in the key.


Levente




Levente


Thanks in advance,

--
Mariano
http://marianopeck.wordpress.com







--
Mariano
http://marianopeck.wordpress.com