Skip to content

Stable ABI contains outdated symbols #82

@encukou

Description

@encukou

Copying from @victor's comment from #4 (comment)

It would be nice to consider designing an abi4 to cleanup the dust: remove functions which are already removed in the API level. The abi3 has 61 symbols which are "ABI only": has been removed from the limited C API.

Well, there are also private symbols which are used by limited C API macros/functions which still exist. For example, the ABI-only variable _Py_NoneStruct is used to implement Py_None at the API level: #define Py_None (&_Py_NoneStruct).

These removals are related to different Python changes. Examples:

I see that _Py_RefTotal is an ABI-only symbol added to support the Python debug build (Py_DEBUG), but I'm not sure that it was needed to expose it. Before 3.9, Python debug build didn't support the limited C API. In Python 3.10, Py_INCREF() and Py_DECREF() got support for the limited API but are implemented as opaque function calls in this case. Maybe the problem is about supporting the limited C API version 3.9 and older on a debug build. I forgot the complicated details.

ABI-only symbols (functions and variables) of the Python 3.13 stable ABI:

  • PyCFunction_Call()
  • PyEval_AcquireLock()
  • PyEval_CallFunction()
  • PyEval_CallMethod()
  • PyEval_CallObjectWithKeywords()
  • PyEval_InitThreads()
  • PyEval_ReleaseLock()
  • PyEval_ThreadsInitialized()
  • PyMarshal_ReadObjectFromString()
  • PyMarshal_WriteObjectToString()
  • PyObject_AsCharBuffer()
  • PyObject_AsReadBuffer()
  • PyObject_AsWriteBuffer()
  • PyObject_CheckReadBuffer()
  • PySys_AddWarnOption()
  • PySys_AddWarnOptionUnicode()
  • PySys_AddXOption()
  • PySys_HasWarnOptions()
  • PySys_SetArgv()
  • PySys_SetArgvEx()
  • PySys_SetPath()
  • PyThreadState_DeleteCurrent()
  • PyUnicode_GetSize()
  • PyUnicode_InternImmortal()
  • Py_GetArgcArgv()
  • Py_SetPath()
  • Py_SetProgramName()
  • Py_SetPythonHome()
  • _PyArg_ParseTupleAndKeywords_SizeT()
  • _PyArg_ParseTuple_SizeT()
  • _PyArg_Parse_SizeT()
  • _PyArg_VaParseTupleAndKeywords_SizeT()
  • _PyArg_VaParse_SizeT()
  • _PyErr_BadInternalCall()
  • _PyObject_CallFunction_SizeT()
  • _PyObject_CallMethod_SizeT()
  • _PyObject_GC_New()
  • _PyObject_GC_NewVar()
  • _PyObject_GC_Resize()
  • _PyObject_New()
  • _PyObject_NewVar()
  • _PyState_AddModule()
  • _PyThreadState_Init()
  • _PyThreadState_Prealloc()
  • _PyWeakref_CallableProxyType
  • _PyWeakref_ProxyType
  • _PyWeakref_RefType
  • _Py_BuildValue_SizeT()
  • _Py_CheckRecursiveCall()
  • _Py_Dealloc()
  • _Py_DecRef()
  • _Py_EllipsisObject
  • _Py_FalseStruct
  • _Py_IncRef()
  • _Py_NegativeRefcount()
  • _Py_NoneStruct
  • _Py_NotImplementedStruct
  • _Py_RefTotal
  • _Py_SwappedOp
  • _Py_TrueStruct
  • _Py_VaBuildValue_SizeT()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions