Ulrich Eckhardt, 25.10.2011 08:49:
Am 23.10.2011 14:41, schrieb Stefan Behnel:
That's just fine. If you are interested in the inner mechanics of the
CPython runtime, reading the source is a very good way to start getting
involved with the project.
However, many extension module authors don't care about these inner
mechanics and just use Cython instead. That keeps them from having to
learn the C-API of CPython, and from tying their code too deeply into
the CPython runtime itself.
Could you elaborate a bit? What are the pros and cons of writing an
extension module using the Cython API compared to using the CPyothon API?
No cons. ;)
Cython is not an API, it's a programming language. It's Python, but with
extended support for talking to C/C++ code (and also Fortran). That means
that you don't have to use the C-API yourself, because Cython will do it
for you.
In particular, how portable is it? Can I compile a module in one and use it
in the other?
They both use the CPython C-API internally. It's just that you are not
using it explicitly in your code, so you (can) keep your own code free of
CPython-isms.
It's substantially more portable than the "usual" hand-written code,
because it generates C code for you that compiles and works in CPython 2.4
up to the latest 3.3 in-development version, and also with all major C/C++
compilers, etc. It also generates faster glue code than you would write,
e.g. for data type conversion and argument unpacking in function calls. So
it speeds up thin wrappers automatically for you.
That doesn't mean that you can't get the same level of speed and
portability in hand-written code. It just means that you don't have to do
it yourself. Saves a lot of time, both during development and later during
the maintenance cycle. Basically, it allows you to focus on the
functionality you want to implement, rather than the implementation details
of CPython, and also keeps the maintenance overhead at that level for you.
Don't I just tie myself to a different API, but tie myself
nonetheless?
There's a port to plain Python+ctypes underways, for example, which you
could eventually use in PyPy. Try to do that at the C-API level.
Stefan
--
http://mail.python.org/mailman/listinfo/python-list