A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2006-March/062839.html below:

[Python-Dev] PySet API

[Python-Dev] PySet APIRaymond Hettinger raymond.hettinger at verizon.net
Sun Mar 26 18:43:35 CEST 2006
[Aahz]
> Speaking as a person who does relatively little C programming, I don't
> see much difference between them.  The first example is more Pythonic --
> for Python.  I agree with Barry that it's not much of a virtue for C
> code.

It was a trick question.  Everyone is supposed to be attracted to the _next 
version because it is shorter, faster, and takes less ref counting management. 
However, the _next version has a hard-to-find bug.  The call to PyObject_Hash() 
can trigger arbitrary Python code and possibly mutate the table, leaving 
pointers to invalid memory addresses.  It would likely take Armin less than five 
minutes to write a pure Python crasher for the code.  And THAT is why 
PySet_Next() should never come into being.

The iterator form is more duck-typable and re-usable than the set specific _next 
version, but the example was chosen to take that issue off of the table and just 
focus on mutation issues.


> However, I do have one nitpick with both your examples; I don't know
> whether this is an artifact of them being examples:
>
>>                 hash ^= h * 3644798167;
>
> Seems to me that magic numbers like this need to be made constants and
> explained with a comment

FWIW, the actual code does have comments.  I stripped them out of the posting 
because they weren't relevant to the code comparison.



Raymond 

More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4