[Patches] [ python-Patches-1442442 ] Faster list comprehensions
SourceForge.net
noreply at sourceforge.net
Fri Mar 3 17:21:15 CET 2006
Patches item #1442442, was opened at 2006-03-03 07:41
Message generated for change (Comment added) made by rhettinger
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1442442&group_id=5470
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Parser/Compiler
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: Collin Winter (collinwinter)
>Assigned to: Neal Norwitz (nnorwitz)
Summary: Faster list comprehensions
Initial Comment:
The attached patch results in a 16% speed increase for
list comprehensions. By changing how the LIST_APPEND
opcode works (which was previously totally unused),
it's possible to dramatically simplify the emitted
bytecode for listcomps.
More details are available on my blog:
http://oakwinter.com/code/?p=22.
----------------------------------------------------------------------
>Comment By: Raymond Hettinger (rhettinger)
Date: 2006-03-03 11:21
Message:
Logged In: YES
user_id=80475
Neal, did the LIST_APPEND generation get left out of the
AST. In Py2.4, is was working fine:
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32
bit (Intel)] on win32
>>> from dis import dis
>>> dis(compile('[x for x in range(10) if x %
2]', '', 'single'))
1 0 BUILD_LIST 0
3 DUP_TOP
4 STORE_NAME 0 (_[1])
7 LOAD_NAME 1 (range)
10 LOAD_CONST 0 (10)
13 CALL_FUNCTION 1
16 GET_ITER
>> 17 FOR_ITER 28 (to 48)
20 STORE_NAME 2 (x)
23 LOAD_NAME 2 (x)
26 LOAD_CONST 1 (2)
29 BINARY_MODULO
30 JUMP_IF_FALSE 11 (to 44)
33 POP_TOP
34 LOAD_NAME 0 (_[1])
37 LOAD_NAME 2 (x)
40 LIST_APPEND
41 JUMP_ABSOLUTE 17
>> 44 POP_TOP
45 JUMP_ABSOLUTE 17
>> 48 DELETE_NAME 0 (_[1])
51 PRINT_EXPR
52 LOAD_CONST 2 (None)
55 RETURN_VALUE
----------------------------------------------------------------------
Comment By: Collin Winter (collinwinter)
Date: 2006-03-03 07:49
Message:
Logged In: YES
user_id=1344176
I forgot to mention: the patch also includes updates to
things like Lib/test/test_dis.py and Lib/opcode.py to make
them work with the updated LIST_APPEND opcode and code
generation.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1442442&group_id=5470
More information about the Patches
mailing list