[Cython] RFC: an inline_ function that dumps c/c++ code to the code emitter

Jason Newton nevion at gmail.com
Thu Aug 18 15:05:53 EDT 2016


Accidentally posted to an already-opened tab for the cython-users ML
yesterday, moving to here. Following up from a github opened issue here:

https://github.com/cython/cython/issues/1440

I was hoping we could give a way to drop straight into C/C++ inside of
Cython pyx files.

Why?

-It [helps] avoid needing to declare every class/function in cython, a
somewhat daunting/impossible task that I think everyone hates.  Have you
libraries like Eigen or others that use complex template based techniques?
How about those with tons of [member] functions to boot or getting C++
inheritance involved.
-It works around having the Cython compiler know about all of C++'s nuances
- as an advanced C++ developer these are painful and it is a 2nd class
citizen to Cython's simpler C-support - that's no good.  Just right now I
was bitten by yet another template argument bug and it's clear C++ template
arguments have been kind of dicy since support appeared.
-It would allow single source files - I think this is important for runtime
compiled quasi-JIT/AOC fragments, like OpenCL/PyOpenCL/PyCUDA provide

The idea is that Cython glue makes the playing field for extracting data
easy, but that once it's extracted to a cdef variable for instance, cython
doesn't need to know what happens.  Maybe in a way sort of like the GCC asm
extension.  Hopefully simpler variable passing though.

The alternative to not having this construct is a concrete wall.  I'll have
to segment up files for C++ for the rest of time until I get function forms
that Cython can handle. At that point I just say screw it and use boost
python.  Of course cython does the definitions, data extraction, and
compilation so much easier than boost.python.  It would be a shame to not
consider this plight C++ developers have been cornered into and you can't
say the C++ libraries are broken, it is the strategy Cython is taking that
cannot work.

I did some examination of how this could be implemented - my idea was to
base on the print/exec statements handling and simply emit their arguments
from the Nodes to the code generator.  Proposing inline_c or inline_ as the
statement.  Such a statement could be used to do macros, pull in includes,
and modify/declare c-variables.

-Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cython-devel/attachments/20160818/9012491a/attachment.html>


More information about the cython-devel mailing list