[Python-Dev] Re: Prospective Peephole Transformation (original) (raw)
Skip Montanaro skip at pobox.com
Fri Feb 18 15:57:39 CET 2005
- Previous message: [Python-Dev] Re: Prospective Peephole Transformation
- Next message: [Python-Dev] Re: Prospective Peephole Transformation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
>> Based on some ideas from Skip, I had tried transforming the likes of
>> "x in (1,2,3)" into "x in frozenset([1,2,3])"....
Fredrik> savings in what? time or bytecode size? constructed
Fredrik> micro-benchmarks, or examples from real-life code?
Fredrik> do we have any statistics on real-life "n" values?
My original suggestion wasn't based on performance issues. It was based on the notion of tuples-as-records and lists-as-arrays. Raymond had originally gone through the code and changed
for x in [1,2,3]:
to
for x in (1,2,3):
I suggested that since the standard library code is commonly used as an example of basic Python principles (that's probably not the right word), it should uphold that ideal tuple/list distinction. Raymond then translated
for x in [1,2,3]:
to
for x in frozenset([1,2,3]):
I'm unclear why the list in "for x in [1,2,3]" or "if x not in [1,2,3]" can't fairly easily be recognized as a constant and just be placed in the constants array. The bytecode would show n LOAD_CONST opcodes followed by BUILD_LIST then either a COMPARE_OP (in the test case) or GET_ITER+FOR_ITER (in the for loop case). I think the optimizer should be able to recognize both constructs fairly easily.
I don't know if that would provide a performance increase or not. I was after separation of functionality between tuples and lists.
Skip
- Previous message: [Python-Dev] Re: Prospective Peephole Transformation
- Next message: [Python-Dev] Re: Prospective Peephole Transformation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]