On 08/12/2007, Joseph Lisee email@example.com wrote:
That is very cool to here I have one concern and a few comments. I am not sure what to think of the annotations in the comments. It feel at same time both a hack because it replaces a API around your generator
It does not really replace the API. Think of PyBindGen as two separate layers: 1. an low level API layer, and 2. header file scanning and annotations, which are built on top of that layer. The first layer would be needed anyway, for code modularity and readability. And the first layer can be used directly; I don't see any problem with that.
and elegant because you
don't have to maintain a separate set of files to represent the wrapping. The downside of this is that you would have to modify the source of any code you would wish to wrap, and that will get quite cumbersome.
It is very true. Sometimes you cannot modify the header files you're trying to wrap.
On the other hand, experience tells me you can't fully automate wrapping C/C++ code without either 1) strict displine in the C/C++ code, to use certain memory management conventions (e.g. "callee should never take ownership of the objects in parameters"). or 2) the python bindings have extra information not explicit in the C language. Bottom line is, in the real world you cannot fully automate bindings; you need to give the bindings generator extra information besides the header files.
Annotations is IMHO a nice way to give that extra information, when you can. Not only it's easier to follow the annotations since they're right next to the API declarations, but it gives information that even C/C++ coders will find useful.
How to enter annotations when you can't modify the header files is, however, an open question. I don't have a clear answer yet, and suggestions are welcome.
I am also wondering if you have decent support for standard containers?
Something like Boost.Python indexing suite version 2.
Right again. PyBindGen does not have that as of yet. I would like to implement it some day. But I don't think it's as hard as it sounds, so don't lose hope just yet :)
One question, though, if someone can answer. How does BP indexing suite map e.g. sequence containers? Just convert all elements to a python list? Or does it implement an object that supports iteration and sequence special methods?
BTW, there are more limitations in PyBindGen that people should be aware of, such as:
to implement it any time soon, unless a patch is brought to me);
not be hard to implement);
Gustavo J. A. M. Carneiro INESC Porto, Telecommunications and Multimedia Unit "The universe is always one step beyond logic." -- Frank Herbert