string hash, and an email to stimpy.

Ori Berger orib at
Thu Aug 16 01:21:38 CEST 2001

Disclaimer: It's been over 2 years since I was last regularly reading
c.l.p (drop "regularly" for all practical purposes); I've gone through
the last 200 posts or so, and so no mention of what I'm about to post,
but it _may_ be old news. (I didn't see any mention of Guido's time 
machine either, nor Moshe's "which fun to me, I'm not signing 
permanent" signature. At least Tim's <wink>-ly yours style is still

And to the point:

I was browsing 2.2a1 CVS repository through source forge's web 
interface. I looked at exactly two files, and found exactly two
puzzling things:

File: [Development] / python / python / dist / src / Objects /
stringobject.c (download) (as text) 
 Revision 2.122 , Thu Aug 2 04:15:00 2001 UTC (13 days, 18 hours ago) by
 Branch: MAIN 
 CVS Tags: after-descr-branch-merge, HEAD 
 Changes since 2.121: +50 -26 lines 

 Merge of descr-branch back into trunk.
(somewhere down below, inside string_hash)
        len = a->ob_size;
        p = (unsigned char *) a->ob_sval;
        x = *p << 7;
        while (--len >= 0)
                x = (1000003*x) ^ *p++;
        x ^= a->ob_size;

Do you really mean that hash function? Do you trust compilers to 
optimize that multiplication well enough? Won't a hashpjw-style 
hash be faster to compute? Will the direction of entropy reverse?

The following CVS entry is the only reference I could find (and it 
took me quite some time to find, since I searched for "hash" rather
than "hach" ....) is:
Revision 2.31 / (download) / (as text) - annotate - [select for diffs] ,
Wed Sep 11 20:22:48 1996 UTC (4 years, 11 months ago) by guido 
Branch: MAIN 
Changes since 2.30: +1 -1 lines 
Diff to previous 2.30 
Multiply by 1000003 instead of 3 in string hach

I'm quite sure it gives a more uniform distribution, but 1000003
has 6 or 7 bits set, which means it will probably compile to a 
real multiplication on most architectures.

Second thing:

---File: [Development] / python / python / dist / src / Lib /
(download) (as text) 
 Revision 1.7 , Mon Aug 13 21:18:01 2001 UTC (2 days, 2 hours ago) by
 Branch: MAIN 
 CVS Tags: HEAD 
 Changes since 1.6: +2 -1 lines 

 found_terminator(): Add a debug print showing the data.
(somewhere down below, inside smtp_RCPT...)
        if address.lower().startswith('stimpy'):
            self.push('503 You suck %s' % address)

Who's the aforementioned stimpy figure? (No, I don't watch TV if it's
related - you'll have to give me all the details).


(please cc:me on your reply - I suspect my news server is not that

More information about the Python-list mailing list