Uh oh!
There was an error while loading. Please reload this page.
bpo-32388: Remove cross-version binary compatibility requirement in tp_flags - #4944
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
jdemeyer
commented
Jul 31, 2018
You write "Starting with 3.7, binary compatibility of C extensions accross feature releases of Python is not supported anymore" but has such binary compatibility ever been supported? This PR seems to imply that it was, but PEP 384 explicitly says that the layout of PS: typo |
d49cf6f to
f7b494cCompare…p_flags It is now allowed to add new fields at the end of the PyTypeObject struct (and even in the middle, if we are so inclined) in feature releases without having to allocate a dedicated compatibility flag in tp_flags. This will reduce the risk of running out of bits in the 32-bit tp_flags value.
57ea6a3 to
19770aeComparepitrou
commented
May 6, 2019
I updated this PR against master and addressed the review comments. |
pitrou
commented
May 6, 2019
@zooba Is there a way to retry an Azure job which failed because it couldn't "provision the agent"? |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
jdemeyer
commented
May 15, 2019
It would be good to get this done before the first 3.8 beta. @scoder: is there any chance that you could finish the "core review"? |
jdemeyer
commented
May 15, 2019
Not "in the middle" as that would break the typical code of the form PyTypeObjectPyCFunction_Type= {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"builtin_function_or_method",
sizeof(PyCFunctionObject),
0,
(destructor)meth_dealloc, /* tp_dealloc */0, /* tp_print */0, /* tp_getattr */0, /* tp_setattr */0, /* tp_reserved */
(reprfunc)meth_repr, /* tp_repr */0, /* tp_as_number */0, /* tp_as_sequence */0, /* tp_as_mapping */
(hashfunc)meth_hash, /* tp_hash */PyCFunction_Call, /* tp_call */0, /* tp_str */PyObject_GenericGetAttr, /* tp_getattro */0, /* tp_setattro */0, /* tp_as_buffer */Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */0, /* tp_doc */
(traverseproc)meth_traverse, /* tp_traverse */0, /* tp_clear */meth_richcompare, /* tp_richcompare */
offsetof(PyCFunctionObject, m_weakreflist), /* tp_weaklistoffset */0, /* tp_iter */0, /* tp_iternext */meth_methods, /* tp_methods */meth_members, /* tp_members */meth_getsets, /* tp_getset */0, /* tp_base */0, /* tp_dict */
};With C99, there are better ways to write the above, but we should still support that. |
jdemeyer
commented
May 15, 2019
One thing that keeps bugging me when I see this diff: Do we really have to change the value of |
vstinner
commented
May 27, 2019
cc @encukou |
encukou
commented
May 28, 2019
Can we keep the bit for backwards compatibility? Pedantically, something like |
pitrou
commented
May 29, 2019
What value do you suggest |
jdemeyer
commented
May 29, 2019
The same value that it always had. |
pitrou
commented
May 29, 2019
Ok. Unless someone opposes, I'll merge this once CI is green. |
encukou
commented
May 29, 2019
Thank you! |
scoder
commented
Jun 1, 2019
Nice, happy to see that this was merged. |
…p_flags (pythonGH-4944) It is now allowed to add new fields at the end of the PyTypeObject struct without having to allocate a dedicated compatibility flag in tp_flags. This will reduce the risk of running out of bits in the 32-bit tp_flags value.
Starting with 3.8, it is now allowed to add new fields at the end of the
PyTypeObjectstruct in feature releases without having to allocate a dedicated compatibility flag intp_flags. This will reduce the risk of running out of bits in the 32-bittp_flagsvalue.https://bugs.python.org/issue32388