improvement for compiler-generated python for 'None' object comparisons
-----------------------------------------------------------------------

                 Key: THRIFT-1107
                 URL: https://issues.apache.org/jira/browse/THRIFT-1107
             Project: Thrift
          Issue Type: Improvement
          Components: Python - Compiler
            Reporter: Will Pierce
            Assignee: Will Pierce


The python code generator produces several python statements, especially the 
{{write()}} methods' per-field code, that compares something to None using 
'{{!= None}}', when it is more efficient to use the '{{is not None}}' 
expression.

>From what I understand, in python it's almost always true that ({{x \!= 
>None}}) == ({{x is not None}}), but the actual implementation and intent is 
>very different.  The '{{\!= None}}' comparison does a by-value comparison that 
>does much more work than an object identity '{{is not None}}' comparison does.

The actual performance impact isn't much, but I benchmarked the performance of 
'{{x is not None}}' to '{{x \!= None}}' and got some interesting results.  In 
python 2.4, 2.7 and 3.1, it's about 2-3 times as fast to use '{{is not None}}' 
over '{{\!= None}}'.

I'll attach a patch to switch to 'is not None', and attach a simple benchmark 
test script exercising '{{is not None}}' vs. '{{\!= None}}' and post the 
performance measurements to this ticket.

These URLs are somewhat relevant about this specific issue in general:
* http://www.python.org/dev/peps/pep-0008/ (Search for 'singletons', or scroll 
to 'Programming Recommendations' item 2)
* 
http://stackoverflow.com/questions/100732/why-is-if-not-someobj-better-than-if-someobj-none-in-python
 - Stack Overflow question about the same, though it veers into the cost of 
typecasting to bool, which isn't relevant here
* http://jaredgrubb.blogspot.com/2009/04/python-is-none-vs-none.html - a 
similar experience and test results that match


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to