Read about our upcoming Code of Conduct on this issue

This instance will be upgraded to Heptapod 0.28.1 on 2022-01-26 at 16:00 UTC+1 (a few minutes of down time)

Commit 7ec94019 authored by Armin Rigo's avatar Armin Rigo
Browse files

Try to rewrite and expand a bit the introduction.

parent d10017228698
......@@ -2,17 +2,34 @@ cffi
====
Foreign Function Interface for Python calling C code. The aim of this project
is to provide a convinient and reliable way of calling C code from Python.
The interface is based on [luajit FFI](http://luajit.org/ext_ffi.html) and follows a few principles:
* You want to use C code from Python code, so you should be able to do so
without needing to learn a 3rd language
(unlike [Cython](http://www.cython.org) or [SWIG](http://www.swig.org/) or ctypes)
* Keep all the python-related logic in Python instead of C (unlike
[CPython native C extensions](http://docs.python.org/extending/extending.html))
* Be complete and work on the level of API (unlike [ctypes](http://docs.python.org/library/ctypes.html))
is to provide a convenient and reliable way of calling C code from Python.
The interface is based on [luajit FFI](http://luajit.org/ext_ffi.html) and
follows a few principles:
* 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](http://www.cython.org),
[SWIG](http://www.swig.org/)) or API
([ctypes](http://docs.python.org/library/ctypes.html)). So we tried to
assume that you know Python and C and minimize the extra bits of API that
you need to learn.
* Keep all the Python-related logic in Python so that you don't need to
write much C code (unlike
[CPython native C extensions](http://docs.python.org/extending/extending.html)).
* 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 (e.g. they may
document a "struct" as having at least these fields, but maybe more).
([ctypes](http://docs.python.org/library/ctypes.html) works at the ABI
level, whereas
[native C extensions](http://docs.python.org/extending/extending.html)
work at the API level.)
* We try to be complete. For now some C99 constructs are not supported,
but all C89 should be, including macros (apart from the most advanced
(ab)uses of these macros).
Simple example
--------------
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment