[Python-Dev] Use of Cython

Nick Coghlan ncoghlan at gmail.com
Sun Aug 5 12:14:10 EDT 2018


On 5 August 2018 at 18:06, Ronald Oussoren <ronaldoussoren at mac.com> wrote:
> I’m not sure if I understand this, ctypes and cffi are used to access C APIs
> without writing C code including the CPython API (see for example
> <https://github.com/abarnert/superhackyinternals/blob/master/internals.py>).
>
> The code code below should be mostly equivalent to the Cython example posted
> earlier:
>
> import unittest
> import ctypes
> from ctypes import pythonapi
>
> class PyObject(ctypes.Structure):
>     _fields_ = (
>         ('ob_refcnt', ctypes.c_ssize_t),
>     )
>
> pythonapi.PyList_Append.argtypes = [ctypes.py_object, ctypes.py_object]
>
> def refcount(v):
>     return PyObject.from_address(id(v)).ob_refcnt

The quoted code is what I was referring to in:
====
ctypes & cffi likely wouldn't help as much in the case, since they
don't eliminate the need to come up with custom code for parts 3 & 4,
they just let you write that logic in Python rather than C.
====

Cython has more machinery for accessing the CPython C API correctly
already built in to it, whereas ctypes has no type safety at all,
while cffi doesn't special case CPython's C API in particular.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Python-Dev mailing list