STINNER Victor <vstin...@python.org> added the comment:

For PyObject, I converted Py_REFCNT(), Py_TYPE() and Py_SIZE() to static inline 
functions to enforce the usage of Py_SET_REFCNT(), Py_SET_TYPE() and 
Py_SET_SIZE(). Only a minority of C extensions are affected by these changes. 
Also, there is more pressure from recent optimization projects to abstract 
accesses to PyObject members.

I agree that it doesn't seem that "AS" functions are abused to *set* the inner 
string:

* PyByteArray_AS_STRING()
* PyBytes_AS_STRING()
* PyFloat_AS_DOUBLE()

> If "protecting against wrong use" is the only reason to go down the slippery 
> path of starting to rely on compiler optimizations for performance critical 
> operations, the argument is not good enough.

Again, I'm not aware of any performance issue caused by short static inline 
functions like Py_TYPE() or the proposed PyFloat_AS_DOUBLE(). If there is a 
problem, it should be addressed, since Python uses more and more static inline 
functions.

static inline functions is a common feature of C language. I'm not sure where 
your doubts of bad performance come from.

Using static inline functions has other advantages. It helps debugging and 
profiling, since the function name can be retrieved by debuggers and profilers 
when analysing the machine code. It also avoids macro pitfalls (like abusing a 
macro to use it as an l-value ;-)).

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45476>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to