Title: C-API tracking: missing Stable ABI functions in crates/capi · Issue #8156 · RustPython/RustPython · GitHub
Open Graph Title: C-API tracking: missing Stable ABI functions in crates/capi · Issue #8156 · RustPython/RustPython
X Title: C-API tracking: missing Stable ABI functions in crates/capi · Issue #8156 · RustPython/RustPython
Description: Latest update: 2026-07-13 Goal Track CPython Stable ABI C-API functions that are still missing from RustPython crates/capi, organized by CPython Include/ header layout (mirroring RustPython’s capi split, including abstract_/*). Missing S...
Open Graph Description: Latest update: 2026-07-13 Goal Track CPython Stable ABI C-API functions that are still missing from RustPython crates/capi, organized by CPython Include/ header layout (mirroring RustPython’s capi ...
X Description: Latest update: 2026-07-13 Goal Track CPython Stable ABI C-API functions that are still missing from RustPython crates/capi, organized by CPython Include/ header layout (mirroring RustPython’s capi ...
Opengraph URL: https://github.com/RustPython/RustPython/issues/8156
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"C-API tracking: missing Stable ABI functions in crates/capi","articleBody":"Latest update: **2026-07-13**\n\n## Goal\nTrack CPython Stable ABI C-API functions that are still missing from RustPython `crates/capi`, organized by CPython `Include/` header layout (mirroring RustPython’s capi split, including `abstract_/*`).\n\n# Missing Stable ABI Functions by Header\n\nDerived from CPython `Misc/stable_abi.toml` and compared against exported C-API functions in RustPython `crates/capi/src`.\n\nThis list includes only functions that are still candidates for implementation in RustPython C-API:\n\n- starts from all `[function.*]` entries in `Misc/stable_abi.toml`\n- removes private functions (names starting with `_`)\n- removes functions already implemented in RustPython `crates/capi/src`\n- removes functions marked removed in CPython \"What's New\" C-API notes across Python 3.0 through 3.15\n- marks remaining deprecated or soft-deprecated functions as `(deprecated)`\n- groups remaining functions by CPython `Include/*.h` header, using RustPython's existing `crates/capi/src` file split (including `abstract_/*`)\n\nTotal missing: **334**\n\n## `Include/abstract.h -\u003e crates/capi/src/abstract_.rs` (4)\n\n- `PyObject_CallFunction`\n- `PyObject_CallFunctionObjArgs`\n- `PyObject_CallMethod`\n- `PyVectorcall_NARGS`\n\n## `Include/abstract.h -\u003e crates/capi/src/abstract_/iter.rs` (2)\n\n- `PyAIter_Check`\n- `PyObject_GetAIter`\n\n## `Include/abstract.h -\u003e crates/capi/src/abstract_/number.rs` (2)\n\n- `PyNumber_AsSsize_t`\n- `PyNumber_ToBase`\n\n## `Include/abstract.h -\u003e crates/capi/src/abstract_/sequence.rs` (1)\n\n- `PySequence_Fast`\n\n## `Include/audit.h` (2)\n\n- `PySys_Audit`\n- `PySys_AuditTuple`\n\n## `Include/bytearrayobject.h` (1)\n\n- `PyByteArray_Concat`\n\n## `Include/bytesobject.h` (9)\n\n- `PyBytes_AsStringAndSize`\n- `PyBytes_Concat`\n- `PyBytes_ConcatAndDel`\n- `PyBytes_DecodeEscape`\n- `PyBytes_FromFormat`\n- `PyBytes_FromFormatV`\n- `PyBytes_FromObject`\n- `PyBytes_FromString`\n- `PyBytes_Repr`\n\n## `Include/ceval.h` (8)\n\n- `PyEval_EvalCodeEx`\n- `PyEval_GetFuncName`\n- `PyEval_ReleaseThread`\n- `Py_AddPendingCall`\n- `Py_GetRecursionLimit`\n- `Py_LeaveRecursiveCall`\n- `Py_MakePendingCalls`\n- `Py_SetRecursionLimit`\n\n## `Include/descrobject.h` (7)\n\n- `PyDescr_NewClassMethod`\n- `PyDescr_NewGetSet`\n- `PyDescr_NewMember`\n- `PyDescr_NewMethod`\n- `PyMember_GetOne` (deprecated)\n- `PyMember_SetOne` (deprecated)\n- `PyWrapper_New`\n\n## `Include/dictobject.h` (7)\n\n- `PyDict_Clear`\n- `PyDict_DelItemString`\n- `PyDict_GetItem`\n- `PyDict_GetItemString`\n- `PyDict_GetItemStringRef`\n- `PyDict_GetItemWithError`\n- `PyDict_SetItemString`\n\n## `Include/fileobject.h` (5)\n\n- `PyFile_FromFd`\n- `PyFile_GetLine`\n- `PyFile_WriteObject`\n- `PyFile_WriteString`\n- `PyObject_AsFileDescriptor`\n\n## `Include/fileutils.h` (2)\n\n- `Py_DecodeLocale` (deprecated)\n- `Py_EncodeLocale` (deprecated)\n\n## `Include/import.h` (17)\n\n- `PyImport_AddModule`\n- `PyImport_AddModuleObject`\n- `PyImport_AppendInittab`\n- `PyImport_ExecCodeModule`\n- `PyImport_ExecCodeModuleObject`\n- `PyImport_ExecCodeModuleWithPathnames`\n- `PyImport_GetImporter`\n- `PyImport_GetMagicNumber`\n- `PyImport_GetMagicTag`\n- `PyImport_GetModule` (deprecated)\n- `PyImport_GetModuleDict`\n- `PyImport_ImportFrozenModule`\n- `PyImport_ImportFrozenModuleObject`\n- `PyImport_ImportModule` (deprecated)\n- `PyImport_ImportModuleLevel`\n- `PyImport_ImportModuleLevelObject`\n- `PyImport_ReloadModule`\n\n## `Include/intrcheck.h` (5)\n\n- `PyOS_AfterFork` (deprecated)\n- `PyOS_AfterFork_Child` (deprecated)\n- `PyOS_AfterFork_Parent` (deprecated)\n- `PyOS_BeforeFork` (deprecated)\n- `PyOS_InterruptOccurred`\n\n## `Include/iterobject.h` (2)\n\n- `PyCallIter_New`\n- `PySeqIter_New`\n\n## `Include/listobject.h` (1)\n\n- `PyList_GetItem`\n\n## `Include/longobject.h` (12)\n\n- `PyLongWriter_Create`\n- `PyLongWriter_Discard`\n- `PyLongWriter_Finish`\n- `PyLong_AsLongAndOverflow`\n- `PyLong_AsLongLongAndOverflow`\n- `PyLong_AsNativeBytes`\n- `PyLong_Export`\n- `PyLong_FreeExport`\n- `PyLong_GetInfo`\n- `PyLong_GetNativeLayout`\n- `PyOS_strtol`\n- `PyOS_strtoul`\n\n## `Include/memoryobject.h` (3)\n\n- `PyMemoryView_FromBuffer`\n- `PyMemoryView_FromMemory`\n- `PyMemoryView_GetContiguous`\n\n## `Include/methodobject.h` (3)\n\n- `PyCFunction_GetFlags`\n- `PyCFunction_GetFunction`\n- `PyCFunction_GetSelf`\n\n## `Include/modsupport.h` (21)\n\n- `PyABIInfo_Check`\n- `PyArg_Parse`\n- `PyArg_ParseTuple` (deprecated)\n- `PyArg_ParseTupleAndKeywords`\n- `PyArg_UnpackTuple`\n- `PyArg_VaParse`\n- `PyArg_VaParseTupleAndKeywords`\n- `PyArg_ValidateKeywordArguments`\n- `PyModule_Add` (deprecated)\n- `PyModule_AddFunctions`\n- `PyModule_AddIntConstant`\n- `PyModule_AddObject` (deprecated)\n- `PyModule_AddObjectRef` (deprecated)\n- `PyModule_AddStringConstant`\n- `PyModule_AddType`\n- `PyModule_Create2`\n- `PyModule_ExecDef` (deprecated)\n- `PyModule_FromDefAndSpec2` (deprecated)\n- `PyModule_SetDocString`\n- `Py_BuildValue`\n- `Py_VaBuildValue`\n\n## `Include/moduleobject.h` (11)\n\n- `PyModuleDef_Init`\n- `PyModule_GetDef`\n- `PyModule_GetDict`\n- `PyModule_GetFilename`\n- `PyModule_GetName`\n- `PyModule_GetState`\n- `PyModule_GetStateSize`\n- `PyModule_GetState_DuringGC`\n- `PyModule_GetToken`\n- `PyModule_GetToken_DuringGC`\n- `PyModule_New`\n\n## `Include/object.h` (22)\n\n- `PyType_ClearCache`\n- `PyType_FromMetaclass` (deprecated)\n- `PyType_FromModuleAndSpec` (deprecated)\n- `PyType_FromSlots`\n- `PyType_FromSpec` (deprecated)\n- `PyType_FromSpecWithBases` (deprecated)\n- `PyType_GenericAlloc`\n- `PyType_GenericNew`\n- `PyType_GetBaseByToken`\n- `PyType_GetBaseByToken_DuringGC`\n- `PyType_GetModule`\n- `PyType_GetModuleByDef`\n- `PyType_GetModuleByToken`\n- `PyType_GetModuleByToken_DuringGC`\n- `PyType_GetModuleState`\n- `PyType_GetModuleState_DuringGC`\n- `PyType_GetModule_DuringGC`\n- `PyType_GetTypeDataSize`\n- `PyType_Modified`\n- `PyType_Ready`\n- `Py_SET_SIZE`\n- `Py_SIZE`\n\n## `Include/objimpl.h` (3)\n\n- `PyObject_GC_Del`\n- `PyObject_Init`\n- `PyObject_InitVar`\n\n## `Include/pybuffer.h` (11)\n\n- `PyBuffer_FillContiguousStrides`\n- `PyBuffer_FillInfo`\n- `PyBuffer_FromContiguous`\n- `PyBuffer_GetPointer`\n- `PyBuffer_IsContiguous`\n- `PyBuffer_Release`\n- `PyBuffer_SizeFromFormat`\n- `PyBuffer_ToContiguous`\n- `PyObject_CheckBuffer`\n- `PyObject_CopyData`\n- `PyObject_GetBuffer`\n\n## `Include/pycapsule.h` (3)\n\n- `PyCapsule_GetDestructor`\n- `PyCapsule_SetDestructor`\n- `PyCapsule_SetName`\n\n## `Include/pyerrors.h` (11)\n\n- `PyErr_Format`\n- `PyErr_FormatV`\n- `PyErr_NormalizeException`\n- `PyErr_ProgramText`\n- `PyErr_SetImportError`\n- `PyErr_SetImportErrorSubclass`\n- `PyErr_SyntaxLocation`\n- `PyErr_SyntaxLocationEx`\n- `PyExceptionClass_Name`\n- `PyOS_snprintf`\n- `PyOS_vsnprintf`\n\n## `Include/pylifecycle.h` (10)\n\n- `PyOS_getsig`\n- `PyOS_setsig`\n- `Py_AtExit`\n- `Py_BytesMain`\n- `Py_EndInterpreter`\n- `Py_Exit`\n- `Py_Main`\n- `Py_NewInterpreter`\n- `Py_SetProgramName`\n- `Py_SetPythonHome`\n\n## `Include/pymacro.h` (2)\n\n- `Py_PACK_FULL_VERSION`\n- `Py_PACK_VERSION`\n\n## `Include/pystate.h` (27)\n\n- `PyGILState_GetThisThreadState`\n- `PyInterpreterGuard_Close`\n- `PyInterpreterGuard_FromCurrent`\n- `PyInterpreterGuard_FromView`\n- `PyInterpreterState_Clear`\n- `PyInterpreterState_Delete`\n- `PyInterpreterState_GetDict`\n- `PyInterpreterState_New`\n- `PyInterpreterView_Close`\n- `PyInterpreterView_FromCurrent`\n- `PyInterpreterView_FromMain`\n- `PyState_AddModule`\n- `PyState_FindModule`\n- `PyState_RemoveModule`\n- `PyThreadState_Clear`\n- `PyThreadState_Delete`\n- `PyThreadState_Ensure`\n- `PyThreadState_EnsureFromView`\n- `PyThreadState_Get`\n- `PyThreadState_GetDict`\n- `PyThreadState_GetFrame`\n- `PyThreadState_GetID`\n- `PyThreadState_GetInterpreter`\n- `PyThreadState_New`\n- `PyThreadState_Release`\n- `PyThreadState_SetAsyncExc` (deprecated)\n- `PyThreadState_Swap`\n\n## `Include/pystrtod.h` (2)\n\n- `PyOS_double_to_string`\n- `PyOS_string_to_double`\n\n## `Include/pythonrun.h` (3)\n\n- `PyErr_Display` (deprecated)\n- `PyErr_Print`\n- `PyOS_CheckStack`\n\n## `Include/pythread.h` (8)\n\n- `PyThread_GetInfo`\n- `PyThread_tss_alloc`\n- `PyThread_tss_create`\n- `PyThread_tss_delete`\n- `PyThread_tss_free`\n- `PyThread_tss_get`\n- `PyThread_tss_is_created`\n- `PyThread_tss_set`\n\n## `Include/refcount.h` (3)\n\n- `Py_DecRef`\n- `Py_IncRef`\n- `Py_XNewRef`\n\n## `Include/sliceobject.h` (2)\n\n- `PySlice_GetIndices`\n- `PySlice_GetIndicesEx` (deprecated)\n\n## `Include/structseq.h` (4)\n\n- `PyStructSequence_GetItem`\n- `PyStructSequence_New`\n- `PyStructSequence_NewType`\n- `PyStructSequence_SetItem`\n\n## `Include/sysmodule.h` (13)\n\n- `PySys_FormatStderr`\n- `PySys_FormatStdout`\n- `PySys_GetAttr`\n- `PySys_GetAttrString`\n- `PySys_GetObject`\n- `PySys_GetOptionalAttr`\n- `PySys_GetOptionalAttrString`\n- `PySys_GetXOptions`\n- `PySys_SetArgv`\n- `PySys_SetArgvEx`\n- `PySys_SetObject`\n- `PySys_WriteStderr`\n- `PySys_WriteStdout`\n\n## `Include/traceback.h` (1)\n\n- `PyTraceBack_Here`\n\n## `Include/unicodeobject.h` (72)\n\n- `PyUnicode_Append`\n- `PyUnicode_AppendAndDel`\n- `PyUnicode_AsASCIIString`\n- `PyUnicode_AsCharmapString`\n- `PyUnicode_AsLatin1String`\n- `PyUnicode_AsMBCSString`\n- `PyUnicode_AsRawUnicodeEscapeString`\n- `PyUnicode_AsUCS4`\n- `PyUnicode_AsUCS4Copy`\n- `PyUnicode_AsUTF16String`\n- `PyUnicode_AsUTF32String`\n- `PyUnicode_AsUnicodeEscapeString`\n- `PyUnicode_AsWideChar`\n- `PyUnicode_AsWideCharString` (deprecated)\n- `PyUnicode_BuildEncodingMap`\n- `PyUnicode_Compare`\n- `PyUnicode_CompareWithASCIIString`\n- `PyUnicode_Concat`\n- `PyUnicode_Contains`\n- `PyUnicode_Count`\n- `PyUnicode_Decode`\n- `PyUnicode_DecodeASCII`\n- `PyUnicode_DecodeCharmap`\n- `PyUnicode_DecodeCodePageStateful`\n- `PyUnicode_DecodeLatin1`\n- `PyUnicode_DecodeLocale`\n- `PyUnicode_DecodeLocaleAndSize` (deprecated)\n- `PyUnicode_DecodeMBCS`\n- `PyUnicode_DecodeMBCSStateful`\n- `PyUnicode_DecodeRawUnicodeEscape`\n- `PyUnicode_DecodeUTF16`\n- `PyUnicode_DecodeUTF16Stateful`\n- `PyUnicode_DecodeUTF32`\n- `PyUnicode_DecodeUTF32Stateful`\n- `PyUnicode_DecodeUTF7`\n- `PyUnicode_DecodeUTF7Stateful`\n- `PyUnicode_DecodeUTF8`\n- `PyUnicode_DecodeUTF8Stateful`\n- `PyUnicode_DecodeUnicodeEscape`\n- `PyUnicode_EncodeCodePage`\n- `PyUnicode_EncodeLocale` (deprecated)\n- `PyUnicode_Equal`\n- `PyUnicode_EqualToUTF8`\n- `PyUnicode_FSConverter`\n- `PyUnicode_FSDecoder`\n- `PyUnicode_Find`\n- `PyUnicode_FindChar` (deprecated)\n- `PyUnicode_Format`\n- `PyUnicode_FromFormat`\n- `PyUnicode_FromFormatV`\n- `PyUnicode_FromObject`\n- `PyUnicode_FromOrdinal`\n- `PyUnicode_FromString`\n- `PyUnicode_FromWideChar`\n- `PyUnicode_GetDefaultEncoding`\n- `PyUnicode_GetLength`\n- `PyUnicode_InternFromString`\n- `PyUnicode_IsIdentifier`\n- `PyUnicode_Join` (deprecated)\n- `PyUnicode_Partition`\n- `PyUnicode_RPartition`\n- `PyUnicode_RSplit`\n- `PyUnicode_ReadChar`\n- `PyUnicode_Replace`\n- `PyUnicode_Resize`\n- `PyUnicode_RichCompare`\n- `PyUnicode_Split`\n- `PyUnicode_Splitlines`\n- `PyUnicode_Substring`\n- `PyUnicode_Tailmatch`\n- `PyUnicode_Translate`\n- `PyUnicode_WriteChar`\n\n## `Include/warnings.h` (2)\n\n- `PyErr_ResourceWarning`\n- `PyErr_WarnFormat`\n","author":{"url":"https://github.com/bschoenmaeckers","@type":"Person","name":"bschoenmaeckers"},"datePublished":"2026-06-24T11:01:17.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/8156/RustPython/issues/8156"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:95279c4c-e10a-1c7a-57d3-5b6ac2fcdd7f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D430:34DA4E:91FAB9:C48A2C:6A59364A |
| html-safe-nonce | 6ff7376c66ac7ba20bce2eed0326905140bab338533a3b147a38c4e1e7271305 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENDMwOjM0REE0RTo5MUZBQjk6QzQ4QTJDOjZBNTkzNjRBIiwidmlzaXRvcl9pZCI6IjM4Nzg4ODI2MzQzNTgxNDI1MzgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 5b7cdabc5de63cd798167cb68610822fcfce5b72aedb4b2911d1b64aa378956c |
| hovercard-subject-tag | issue:4734169727 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/RustPython/RustPython/8156/issue_layout |
| twitter:image | https://opengraph.githubassets.com/745b8a298054ee9ff708e489b4b071f7d20a8ea380602213aea47a5024729ff4/RustPython/RustPython/issues/8156 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/745b8a298054ee9ff708e489b4b071f7d20a8ea380602213aea47a5024729ff4/RustPython/RustPython/issues/8156 |
| og:image:alt | Latest update: 2026-07-13 Goal Track CPython Stable ABI C-API functions that are still missing from RustPython crates/capi, organized by CPython Include/ header layout (mirroring RustPython’s capi ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | bschoenmaeckers |
| hostname | github.com |
| expected-hostname | github.com |
| None | 9713946e7d87c4b631b5230769f749551d20527cc4872e8f1d2ec6a11bead090 |
| turbo-cache-control | no-preview |
| go-import | github.com/RustPython/RustPython git https://github.com/RustPython/RustPython.git |
| octolytics-dimension-user_id | 39710557 |
| octolytics-dimension-user_login | RustPython |
| octolytics-dimension-repository_id | 135201145 |
| octolytics-dimension-repository_nwo | RustPython/RustPython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 135201145 |
| octolytics-dimension-repository_network_root_nwo | RustPython/RustPython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 858568d2992d2e6aac25cc4ebf5b46c83bbfd745 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width