Hello all, I've just posted a patch to SF (python.org/sf/1442442) that I thought I'd bring to everyone's attention. Executive summary: by changing the behaviour of the unused LIST_APPEND opcode, it's possible to get a 16% speed boost for list comprehensions.
Currently, list comprehensions are built up by calling a bound method on the storage list. This is pretty inefficient, as it requires extra stack manipulation and a function call for each element in the final list. My patch takes the LIST_APPEND opcode (which existed in the eval loop but not the compiler) and changes its behaviour; rather than take its list argument off the stack, it takes a stack offset, allowing it to leave the list object in place. This also replaces the slow Python function call with a fast call directly to PyList_Append. In total, this results in a 16% speed improvement [1]. [1] Benchmarking was done by taking the list comprehension examples in Lib/test/test_grammar.py and running them in a loop a few thousand times. Python revision 42780 took 1.69 seconds to run the examples 10000 times; the updated version takes 1.41 seconds. Thanks, Collin Winter _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com