bpo-32388: Remove cross-version binary compatibility requirement in tp_flags#4944
bpo-32388: Remove cross-version binary compatibility requirement in tp_flags#4944pitrou merged 4 commits into
Conversation
|
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 |
Sorry, something went wrong.
d49cf6f to
f7b494c
Compare
May 6, 2019 16:30
…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
19770ae
Compare
May 6, 2019 16:33
|
I updated this PR against master and addressed the review comments. |
Sorry, something went wrong.
|
@zooba Is there a way to retry an Azure job which failed because it couldn't "provision the agent"? |
Sorry, something went wrong.
|
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"? |
Sorry, something went wrong.
Not "in the middle" as that would break the typical code of the form PyTypeObject PyCFunction_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. |
Sorry, something went wrong.
|
One thing that keeps bugging me when I see this diff: Do we really have to change the value of |
Sorry, something went wrong.
|
Can we keep the bit for backwards compatibility? Pedantically, something like |
Sorry, something went wrong.
What value do you suggest |
Sorry, something went wrong.
The same value that it always had. |
Sorry, something went wrong.
|
Ok. Unless someone opposes, I'll merge this once CI is green. |
Sorry, something went wrong.
|
Thank you! |
Sorry, something went wrong.
|
Nice, happy to see that this was merged. |
Sorry, something went wrong.
…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