[capi-sig] Announcing project PyBindGen
python_capi at behnel.de
Tue Sep 25 13:40:08 CEST 2007
Gustavo Carneiro wrote:
> On 25/09/2007, *Stefan Behnel* <python_capi at behnel.de
> <mailto:python_capi at behnel.de>> wrote:
> I don't understand what "exact API mapping" means.
What I meant was: is the C(++) API mapped directly to Python or can you write
abstraction code in between?
> But yes, so far you have to write all this by hand. Although would love
> to have automatic header file scanning, one day... unfortunately I have
> not had enough time for that, and would rather focus on the code
> generation for now. Lots of neat things could be done later on top of
> the pybindgen python module interface...
But that's what most wrapper generators are there for: move the work from the
developer into a generator. If you have to write code for every
function/method/class you wrap, I think you're better of with Pyrex/Cython, as
Pyrex code is readable and meaningful Python, not just a wrapper writer script.
> I don't like having to learn a new language for this. Just like
> Boost.Python users are comfortable with C++ and avoid having to learn a
> new language, PyBindGen users are comfortable with Python and don't have
> to learn a new language.
Pyrex is *almost* Python, no new language to learn. And Cython is even closer,
as it features a couple of Python 2.5 and Python 3k features.
> Besides, pyrex/cython C++ support is poor or nonexistent. Although I
> acknowledge that if you wrap pure C libraries then this point is moot.
There are a couple of patches that improve the support. Admittedly, Pyrex does
not target C++ libraries, so OO support is mostly missing. But nothing keeps
you from implementing an object interface against C++ classes. I bet the
Cython project would be happy to include it.
> Finally, have you ever looked at the code generated by pyrex?
Yes, definitely, it's pretty readable, well optimised (with Cython, that is)
and straight forward (ok, loops are ugly and over-optimised - but *very*
fast). And I totally like the Cython feature of keeping the surrounding Cython
code inside a C comment. That way, you immediately know what you are looking at.
More information about the capi-sig