This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author rhettinger
Recipients rhettinger
Date 2015-01-17.20:46:06
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1421527566.61.0.766748710579.issue23259@psf.upfronthosting.co.za>
In-reply-to
Content
The lookkey routines in Object/setobject.c have logic to track the first open "freeslot" in a search.  

The benefit is that new keys can reuse previously deleted slots.  The benefit only occurs in cases where keys are added, then some removed, and then more added with no intervening resizes (which clear all dummy entries) and only when the newly added keys happen to land on previously deleted entries.

The cost of the optimization is the extra logic in the inner search loop, an extra freeslot stackframe field that needs to be saved and restored, and extra logic on the loop exit.  It also causes dummies to "leak" out of the lookkey routines so that the code in contains(), discard(), and insert() all have to check for the dummy case.

This patch removes the freeslot tracking.  It saves one field on the stackframe, simplifies the lookkey inner-loop logic, simplifies the lookkey "found_null" logic, it confines knowledge of dummies to just the lookkey functions, and it simplifies the code in the insert(), contains(), and discard() functions.

In short, it looks like the freeslot idea was a net negative -- it optimized an uncommon case at the cost of slowing and complicating the common cases.
History
Date User Action Args
2015-01-17 20:46:06rhettingersetrecipients: + rhettinger
2015-01-17 20:46:06rhettingersetmessageid: <1421527566.61.0.766748710579.issue23259@psf.upfronthosting.co.za>
2015-01-17 20:46:06rhettingerlinkissue23259 messages
2015-01-17 20:46:06rhettingercreate