Re: [Python-checkins] python/dist/src/Objects listobject.c,2.172,2.173
On Fri, 2003-12-26 at 14:05, jhylton@users.sourceforge.net wrote:
Update of /cvsroot/python/python/dist/src/Objects In directory sc8-pr-cvs1:/tmp/cvs-serv32521
Modified Files: listobject.c Log Message: Revert previous two checkins to repair test failure.
The special-case code that was removed could return a value indicating success but leave an exception set. test_fileinput failed in a debug build as a result.
If there's some value to the optimization I just removed, let's discuss it on python-dev. I could have fixed the new code, but it seems a lot of hairy new code with magic constants that only covered a few corner cases. The checkin message pointed to a python-list discussion that didn't have much real evidence in it. Jeremy
On Fri, 26 Dec 2003, Jeremy Hylton wrote:
Modified Files: listobject.c Log Message: Revert previous two checkins to repair test failure.
The special-case code that was removed could return a value indicating success but leave an exception set. test_fileinput failed in a debug build as a result.
If there's some value to the optimization I just removed, let's discuss it on python-dev. I could have fixed the new code, but it seems a lot of hairy new code with magic constants that only covered a few corner cases. The checkin message pointed to a python-list discussion that didn't have much real evidence in it.
While Duncan Booth's tests didn't properly account for setup overhead and his coverage of the range of source element counts insufficient, the performance difference between the two approaches is real and can be quite significant - list_ass_slice() is a big win for large source lists, and a non-trivial loss for small lists (>35% for 10 or fewer elements,
14% up to 64 elements).
The change was an attempt to maximise the performance for all cases. If performance of list() is not seen as particularly crucial, then I would suggest that the special case calling of list_ass_slice() should probably be removed completely. The special casing of empty source sequences is not really important IMO, but the timings looked good... Some of the interest in this area comes from that class of Python user who wants to make a shallow copy of a list, and looks for a copy() method on list objects, and failing that finds copy.copy(). Some of them eventually twig that list() also does this, and doesn't require importing the copy module. These users don't feel comfortable with the slice approach, despite the fact that it is considerably faster. In fact I just noticed a posting to python-list/c.l.p from Alex Martelli in which he suggests list() is not unreasonable to use for this purpose. I don't have any problem with the slice, myself. While I tested the change extensively, I'll confess to not trying a debug build :-(. BTW, my ISP's dialin is playing silly buggers at the moment, so I'm not seeing email in a timely fashion. :-( That's not an excuse for the PyDict_CheckExact goof, because I saw that checkin msg and still managed not to see the problem, and hadn't gotten around to building from a fresh CVS checkout :-( Thanks for fixing that. Regards, Andrew. -- Andrew I MacIntyre "These thoughts are mine alone..." E-mail: andymac@bullseye.apana.org.au (pref) | Snail: PO Box 370 andymac@pcug.org.au (alt) | Belconnen ACT 2616 Web: http://www.andymac.org/ | Australia
participants (2)
-
Andrew MacIntyre
-
Jeremy Hylton