mirror of https://github.com/python/cpython
cdad2724e6
Add pycore_moduleobject.h internal header file with static inline functions to access module members: * _PyModule_GetDict() * _PyModule_GetDef() * _PyModule_GetState() These functions don't check at runtime if their argument has a valid type and can be inlined even if Python is not built with LTO. _PyType_GetModuleByDef() uses _PyModule_GetDef(). Replace PyModule_GetState() with _PyModule_GetState() in the extension modules, considered as performance sensitive: * _abc * _functools * _operator * _pickle * _queue * _random * _sre * _struct * _thread * _winapi * array * posix The following extensions are now built with the Py_BUILD_CORE_MODULE macro defined, to be able to use the internal pycore_moduleobject.h header: _abc, array, _operator, _queue, _sre, _struct. |
||
---|---|---|
.. | ||
cpython | ||
internal | ||
Python.h | ||
README.rst | ||
abstract.h | ||
bltinmodule.h | ||
boolobject.h | ||
bytearrayobject.h | ||
bytesobject.h | ||
cellobject.h | ||
ceval.h | ||
classobject.h | ||
code.h | ||
codecs.h | ||
compile.h | ||
complexobject.h | ||
context.h | ||
datetime.h | ||
descrobject.h | ||
dictobject.h | ||
dynamic_annotations.h | ||
enumobject.h | ||
errcode.h | ||
eval.h | ||
exports.h | ||
fileobject.h | ||
fileutils.h | ||
floatobject.h | ||
frameobject.h | ||
funcobject.h | ||
genericaliasobject.h | ||
genobject.h | ||
import.h | ||
interpreteridobject.h | ||
intrcheck.h | ||
iterobject.h | ||
listobject.h | ||
longintrepr.h | ||
longobject.h | ||
marshal.h | ||
memoryobject.h | ||
methodobject.h | ||
modsupport.h | ||
moduleobject.h | ||
namespaceobject.h | ||
object.h | ||
objimpl.h | ||
opcode.h | ||
osdefs.h | ||
osmodule.h | ||
patchlevel.h | ||
py_curses.h | ||
pycapsule.h | ||
pydtrace.d | ||
pydtrace.h | ||
pyerrors.h | ||
pyexpat.h | ||
pyframe.h | ||
pyhash.h | ||
pylifecycle.h | ||
pymacconfig.h | ||
pymacro.h | ||
pymath.h | ||
pymem.h | ||
pyport.h | ||
pystate.h | ||
pystrcmp.h | ||
pystrhex.h | ||
pystrtod.h | ||
pythonrun.h | ||
pythread.h | ||
rangeobject.h | ||
setobject.h | ||
sliceobject.h | ||
structmember.h | ||
structseq.h | ||
sysmodule.h | ||
token.h | ||
traceback.h | ||
tracemalloc.h | ||
tupleobject.h | ||
typeslots.h | ||
unicodeobject.h | ||
warnings.h | ||
weakrefobject.h |
README.rst
The Python C API ================ The C API is divided into three sections: 1. ``Include/`` 2. ``Include/cpython/`` 3. ``Include/internal/`` Include: Limited API ==================== ``Include/``, excluding the ``cpython`` and ``internal`` subdirectories, contains the public Limited API (Application Programming Interface). The Limited API is a subset of the C API, designed to guarantee ABI stability across Python 3 versions, and is defined in :pep:`384`. Guidelines for expanding the Limited API: - Functions *must not* steal references - Functions *must not* return borrowed references - Functions returning references *must* return a strong reference - Macros should not expose implementation details - Please start a public discussion before expanding the API - Functions or macros with a ``_Py`` prefix do not belong in ``Include/``. It is possible to add a function or macro to the Limited API from a given Python version. For example, to add a function to the Limited API from Python 3.10 and onwards, wrap it with ``#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000``. Include/cpython: CPython implementation details =============================================== ``Include/cpython/`` contains the public API that is excluded from the Limited API and the Stable ABI. Guidelines for expanding the public API: - Functions *must not* steal references - Functions *must not* return borrowed references - Functions returning references *must* return a strong reference Include/internal: The internal API ================================== With PyAPI_FUNC or PyAPI_DATA ----------------------------- Functions or structures in ``Include/internal/`` defined with ``PyAPI_FUNC`` or ``PyAPI_DATA`` are internal functions which are exposed only for specific use cases like debuggers and profilers. With the extern keyword ----------------------- Functions in ``Include/internal/`` defined with the ``extern`` keyword *must not and can not* be used outside the CPython code base. Only built-in stdlib extensions (built with the ``Py_BUILD_CORE_BUILTIN`` macro defined) can use such functions. When in doubt, new internal C functions should be defined in ``Include/internal`` using the ``extern`` keyword.