1. 15 Feb, 2004 2 commits
    • Raymond Hettinger's avatar
      * Moved the responsibility for emptying the previous list from list_fill · fa7b9d82
      Raymond Hettinger authored
        to list_init.
      
      * Replaced the code in list_extend with the superior code from list_fill.
      
      * Eliminated list_fill.
      
      Results:
      
      * list.extend() no longer creates an intermediate tuple except to handle
        the special case of x.extend(x).  The saves memory and time.
      
      * list.extend(x) runs
          about the same x is a list or tuple,
          a little faster when x is an iterable not defining __len__, and
          twice as fast when x is an iterable defining __len__.
      
      * the code is about 15 lines shorter and no longer duplicates
        functionality.
      fa7b9d82
    • Raymond Hettinger's avatar
      Refactor list_extend() and list_fill() for gains in code size, memory · 90a39bf1
      Raymond Hettinger authored
      utilization, and speed:
      
      * Moved the responsibility for emptying the previous list from list_fill
        to list_init.
      
      * Replaced the code in list_extend with the superior code from list_fill.
      
      * Eliminated list_fill.
      
      Results:
      
      * list.extend() no longer creates an intermediate tuple except to handle
        the special case of x.extend(x).  The saves memory and time.
      
      * list.extend(x) runs
          5 to 10% faster when x is a list or tuple
          15% faster when x is an iterable not defining __len__
          twice as fast when x is an iterable defining __len__
      
      * the code is about 15 lines shorter and no longer duplicates
        functionality.
      90a39bf1
  2. 14 Feb, 2004 4 commits
  3. 13 Feb, 2004 6 commits
    • Raymond Hettinger's avatar
      238b267b
    • Fred Drake's avatar
      further testing indicates that the simplified version of the test · 55cf4347
      Fred Drake authored
      (re-using an existing test object class) no longer triggered the
      original segfault when the fix was backed out; restoring the local
      test object class to make the test effective
      
      the assignment of the ref created at the end does not affect the test,
      since the segfault happended before weakref.ref() returned; removing
      the assignment
      55cf4347
    • Raymond Hettinger's avatar
      * Note list optimizations · 7a6d297b
      Raymond Hettinger authored
      * Move an example out of a comment.
      7a6d297b
    • Raymond Hettinger's avatar
      Optimize list.pop() for the common special case of popping off the end. · cb3e580e
      Raymond Hettinger authored
      More than doubles its speed.
      cb3e580e
    • Raymond Hettinger's avatar
      * Optimized list appends and pops by making fewer calls the underlying system · 4bb9540d
      Raymond Hettinger authored
        realloc().  This is achieved by tracking the overallocation size in a new
        field and using that information to skip calls to realloc() whenever
        possible.
      
      * Simplified and tightened the amount of overallocation.  For larger lists,
        this overallocates by 1/8th (compared to the previous scheme which ranged
        between 1/4th to 1/32nd over-allocation).  For smaller lists (n<6), the
        maximum overallocation is one byte (formerly it could be upto eight bytes).
        This saves memory in applications with large numbers of small lists.
      
      * Eliminated the NRESIZE macro in favor of a new, static list_resize function
        that encapsulates the resizing logic.  Coverting this back to macro would
        give a small (under 1%) speed-up.  This was too small to warrant the loss
        of readability, maintainability, and de-coupling.
      
      * Some functions using NRESIZE had grown unnecessarily complex in their
        efforts to bend to the macro's calling pattern.  With the new list_resize
        function in place, those other functions could be simplified.  That is
        being saved for a separate patch.
      
      * The ob_item==NULL check could be eliminated from the new list_resize
        function.  This would entail finding each piece of code that sets ob_item
        to NULL and adding a new line to invalidate the overallocation tracking
        field.  Rather than impose a new requirement on other pieces of list code,
        it was preferred to leave the NULL check in place and retain the benefits
        of decoupling, maintainability and information hiding (only PyList_New()
        and list_sort() need to know about the new field).  This approach also
        reduces the odds of breaking an extension module.
      
      (Collaborative effort by Raymond Hettinger, Hye-Shik Chang, Tim Peters,
       and Armin Rigo.)
      4bb9540d
    • Hye-Shik Chang's avatar
      We have cp932 support in standard distribution now. And there's now · 4a8d42f7
      Hye-Shik Chang authored
      no major codepages unsupported by Python, so remove the eg. case.
      4a8d42f7
  4. 12 Feb, 2004 6 commits
  5. 10 Feb, 2004 7 commits
  6. 09 Feb, 2004 4 commits
  7. 08 Feb, 2004 11 commits