[Python-Dev] Can we use "designated initializer" widely in core modules?
Victor Stinner
victor.stinner at gmail.com
Wed Jan 18 09:52:48 EST 2017
More information about the Python-Dev mailing list
Wed Jan 18 09:52:48 EST 2017
- Previous message (by thread): [Python-Dev] Can we use "designated initializer" widely in core modules?
- Next message (by thread): [Python-Dev] Can we use "designated initializer" widely in core modules?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2017-01-18 12:33 GMT+01:00 Antoine Pitrou <solipsis at pitrou.net>: > I don't think I thought about that idea at the time. tp_finalize > doesn't benefit many extension types, so it's not a huge burden to add > a FLAGS value for the few cases where you want to use it. It isn't obvious to me that I have to define explicitly a Py_TPFLAGS_HAVE_FINALIZE flag if I want to _inherit_ the finalizer from the base class. The flag requires an #ifdef to only define it on Python >= 3.4, which can be painful when you have to support older Python versions and want a single code base for all Python versions. If a C extension defines a type which inherit from a type which has a finalizer, currently the finalizer is not inherited if the new type doesn't set explicitly the Py_TPFLAGS_HAVE_FINALIZE flag. I checked the _socket.socket type. Hopefully, sock_dealloc() calls PyObject_CallFinalizerFromDealloc(), so I guess that it should "just work" if tp_finalize is not inherited in the tp_finalize slot. But for tp_fastcall, if a type doesn't have the Py_TPFLAGS_HAVE_FASTCALL flag, the fastcall_wrapper() has to find the first base class with a tp_fastcall slot which. The search has a complexity of O(n), so it has an impact on performance (even if the impact is low). The flag only says that the C structure contains the field, not that it's set. So I think that it's safe to add Py_TPFLAGS_HAVE_FINALIZE and Py_TPFLAGS_HAVE_FASTCALL to Py_TPFLAGS_DEFAULT. Victor
- Previous message (by thread): [Python-Dev] Can we use "designated initializer" widely in core modules?
- Next message (by thread): [Python-Dev] Can we use "designated initializer" widely in core modules?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list