[Haskell-cafe] looking for optimization advice

Carl Witty cwitty at newtonlabs.com
Thu Mar 25 11:39:26 EST 2004


On Thu, 2004-03-25 at 10:09, David Roundy wrote:
> The function is a simple packed string compare, and I basically just call
> the C standard library function memcmp for this.  Without further ado:

I don't know how to make your particular function faster, but I do have
some ideas for different approaches you may not have thought of.

If you compare strings more often than you create strings, and the
comparisons usually fail, you could add a hash of the string to your
PackedString datatype; then psniceq could compare hash values first and
only confirm equality with the memcmp if the hash values match.

You could use hash consing/interning; keep a global hash table which
maps between strings and some unique identifier (your unique identifier
might be an Int, or an IORef).  Then you can compare the strings with a
single comparison.  (This table could be a memory leak in a long-running
application; you could probably avoid that with weak pointers.)

Carl Witty



More information about the Haskell-Cafe mailing list