[Python-Dev] ANN: Pyrex - a language for writing Python extension

modules (original) (raw)

Kevin Butler kbutler@campuspipeline.com
Thu, 04 Apr 2002 10:08:22 -0700


Greg Ewing wrote:

Pyrex is more or less Python with C data types added. You can write functions which freely intermix operations on Python and C data, with all Python reference counting and error checking completely automated.

An example Pyrex module is shown below. For more information, see:

http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/

Greg, this is beautiful. Exactly what I've been wanting.

:-)

Comments/suggestions:

1- Any chance of having "typecast" spelled as one of:

char*(value)		#consistent w/ Python
(char *)value		#consistent w/ C
cdef char*(value)	#cdef + Python
(cdef char *)value	#cdef + C
cdef(char*, value)	#umm. Maybe easier for parsing?

I prefer any of the above over the <> syntax, in rough order of preference...

2- I like the use of the explicit extern declarations to "import" external C items. It is analogous to "from X import NAME", rather than the "from X import *" behavior suggested by parsing header files. Also, from previous experience w/ SWIG, et al, I think parsing C (& especially C++!) headers is likely to bring in more headaches than it is worth. How deeply do you want to get into macros, typedefs, other extern declarations, etc.?

3- Any thoughts on accessing C++ classes? It need only include the info to access the subset of members that are needed in Python/Pyrex... Maybe something like:

cdef extern class Grail:
    # all members implicity "cdef extern"
    int age
    float volume

    # To self or not to self?
    # Let declarations be consistent w/ C++?
    def __init__( int age, float volume )
    def float quaff( float amount )

Wow! Look at those worms wiggle out of that can! ;-) (Next, I'll hit you up for exceptions and default args, then overloading, then templates & RTTI... )

kb