On Tuesday, February 26, 2013 at 10:13 AM, Maciej Fijalkowski wrote:
Hello.I would like to discuss on the language summit a potential inclusionof cffi[1] into stdlib. This is a project Armin Rigo has been workingfor a while, with some input from other developers. It seems that themain reason why people would prefer ctypes over cffi these days is"because it's included in stdlib", which is not generally the reason Iwould like to hear. Our calls to not use C extensions and to use anFFI instead has seen very limited success with ctypes and quite a lotmore since cffi got released. The API is fairly stable right now withminor changes going in and it'll definitely stablize until Python 3.4release. Notable projects using it:* pypycore - gevent main loop ported to cffi* pgsql2cffi* sdl-cffi bindings* tls-cffi bindings* lxml-cffi port* pyzmq* cairo-cffi* a bunch of othersSo relatively a lot given that the project is not even a year old (itgot 0.1 release in June). As per documentation, the advantages overctypes:* The goal is to call C code from Python. You should be able to do sowithout learning a 3rd language: every alternative requires you tolearn their own language (Cython, SWIG) or API (ctypes). So we triedto assume that you know Python and C and minimize the extra bits ofAPI that you need to learn.* Keep all the Python-related logic in Python so that you don’t needto write much C code (unlike CPython native C extensions).* Work either at the level of the ABI (Application Binary Interface)or the API (Application Programming Interface). Usually, C librarieshave 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). (ctypesworks at the ABI level, whereas Cython and native C extensions work atthe API level.)* We try to be complete. For now some C99 constructs are notsupported, but all C89 should be, including macros (and includingmacro “abuses”, which you can manually wrap in saner-looking Cfunctions).* We attempt to support both PyPy and CPython, with a reasonable pathfor other Python implementations like IronPython and Jython.* Note that this project is not about embedding executable C code inPython, unlike Weave. This is about calling existing C libraries fromPython.so among other things, making a cffi extension gives you the samelevel of security as writing C (and unlike ctypes) and brings quite abit more flexibility (API vs ABI issue) that let's you wrap arbitrarylibraries, even those full of macros.Cheers,fijal_______________________________________________Python-Dev mailing list