a99c7c2366
Foreign Function Interface for Python calling C code. The aim of this project is to provide a convenient and reliable way of calling C code from Python. The interface is based on LuaJIT's FFI and follows a few principles: o The goal is to call C code from Python. You should be able to do so without learning a 3rd language: every alternative requires you to learn their own language (Cython, SWIG) or API (ctypes). So we tried to assume that you know Python and C and minimize the extra bits of API that you need to learn. o Keep all the Python-related logic in Python so that you don't need to write much C code. o Work either at the level of the ABI (Application Binary Interface) or the API (Application Programming Interface). Usually, C libraries have a specified C API but often not an ABI. o We try to be complete. For now some C99 constructs are not supported, but all C89 should be, including macros. o We attempt to support both PyPy and CPython, with a reasonable path for other Python implementations like IronPython and Jython. o Note that this project is not about embedding executable C code in Python, unlike Weave. This is about calling existing C libraries from Python.
22 lines
1.2 KiB
Text
22 lines
1.2 KiB
Text
Foreign Function Interface for Python calling C code. The aim of
|
|
this project is to provide a convenient and reliable way of calling
|
|
C code from Python. The interface is based on LuaJIT's FFI and
|
|
follows a few principles:
|
|
|
|
o The goal is to call C code from Python. You should be able to do
|
|
so without learning a 3rd language: every alternative requires
|
|
you to learn their own language (Cython, SWIG) or API (ctypes).
|
|
So we tried to assume that you know Python and C and minimize
|
|
the extra bits of API that you need to learn.
|
|
o Keep all the Python-related logic in Python so that you don't
|
|
need to write much C code.
|
|
o Work either at the level of the ABI (Application Binary Interface)
|
|
or the API (Application Programming Interface). Usually, C
|
|
libraries have a specified C API but often not an ABI.
|
|
o We try to be complete. For now some C99 constructs are not
|
|
supported, but all C89 should be, including macros.
|
|
o We attempt to support both PyPy and CPython, with a reasonable
|
|
path for other Python implementations like IronPython and Jython.
|
|
o Note that this project is not about embedding executable C code
|
|
in Python, unlike Weave. This is about calling existing C libraries
|
|
from Python.
|