You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.9 KiB
70 lines
2.9 KiB
Goals
|
|
-----
|
|
|
|
The interface is based on `LuaJIT's FFI`_, and follows a few principles:
|
|
|
|
* The goal is to call C code from Python without learning a 3rd language:
|
|
existing alternatives require users to learn domain specific language
|
|
(Cython_, SWIG_) or API (ctypes_). The CFFI design requires users to know
|
|
only C and Python, minimizing the extra bits of API that need to be learned.
|
|
|
|
* Keep all the Python-related logic in Python so that you don't need to
|
|
write much C code (unlike `CPython native C extensions`_).
|
|
|
|
* The preferred way is to work at the level of the API (Application
|
|
Programming Interface): the C compiler is called from the declarations
|
|
you write to validate and link to the C language constructs.
|
|
Alternatively, it is also possible to work at the ABI level
|
|
(Application Binary Interface), the way ctypes_ work.
|
|
However, on non-Windows platforms, C libraries typically
|
|
have a specified C API but not an ABI (e.g. they may
|
|
document a "struct" as having at least these fields, but maybe more).
|
|
|
|
* Try to be complete. For now some C99 constructs are not supported,
|
|
but all C89 should be, including macros (and including macro "abuses",
|
|
which you can `manually wrap`_ in saner-looking C functions).
|
|
|
|
* Attempt to support both PyPy and CPython, with a reasonable path
|
|
for other Python implementations like IronPython and Jython.
|
|
|
|
* Note that this project is **not** about embedding executable C code in
|
|
Python, unlike `Weave`_. This is about calling existing C libraries
|
|
from Python.
|
|
|
|
* There is no C++ support. Sometimes, it is reasonable to write a C
|
|
wrapper around the C++ code and then call this C API with CFFI.
|
|
Otherwise, look at other projects. I would recommend cppyy_, which
|
|
has got some similarities (and also works efficiently on both CPython
|
|
and PyPy).
|
|
|
|
.. _`LuaJIT's FFI`: http://luajit.org/ext_ffi.html
|
|
.. _`Cython`: http://www.cython.org
|
|
.. _`SWIG`: http://www.swig.org/
|
|
.. _`CPython native C extensions`: http://docs.python.org/extending/extending.html
|
|
.. _`native C extensions`: http://docs.python.org/extending/extending.html
|
|
.. _`ctypes`: http://docs.python.org/library/ctypes.html
|
|
.. _`Weave`: http://wiki.scipy.org/Weave
|
|
.. _`cppyy`: http://cppyy.readthedocs.io/en/latest/
|
|
.. _`manually wrap`: overview.html#abi-versus-api
|
|
|
|
Get started by reading `the overview`__.
|
|
|
|
.. __: overview.html
|
|
|
|
|
|
Comments and bugs
|
|
-----------------
|
|
|
|
The best way to contact us is on the IRC ``#pypy`` channel of
|
|
``irc.freenode.net``. Feel free to discuss matters either there or in
|
|
the `mailing list`_. Please report to the `issue tracker`_ any bugs.
|
|
|
|
As a general rule, when there is a design issue to resolve, we pick the
|
|
solution that is the "most C-like". We hope that this module has got
|
|
everything you need to access C code and nothing more.
|
|
|
|
--- the authors, Armin Rigo and Maciej Fijalkowski
|
|
|
|
.. _`issue tracker`: https://bitbucket.org/cffi/cffi/issues
|
|
.. _`mailing list`: https://groups.google.com/forum/#!forum/python-cffi
|