[pypy-dev] rffi feature request
anto.cuni at gmail.com
Sat Aug 11 12:02:42 CEST 2007
Simon Burton wrote:
>>>> I would like to expose some functions as external
>>>> symbols when i build a .so
>>>> def foo(i, j):
>>>> return i+j
>>>> foo._expose_ = [rffi.INT, rffi.INT]
> well, the above code would produce:
> extern int foo(int i, int j)
> return i+j;
> (and perhaps an accompanying .h file)
> thereby providing an interface for other C programs.
> This is rffi producing rather than consuming a C interface.
I think that what you need is similar to what carbonpython does:
basically, carbonpython is a frontend for the translation toolchain that
takes all the exposed functions/classes in an input file and produce a
.NET libraries to be reused by other programs.
Functions are exposed with the @export decorator:
def foo(a, b):
The frontend creates a TranslationDriver objects, but instead of calling
driver.setup() it calls driver.setup_library(), which allows to pass
more than one entry point. I think all this could be reused for your needs.
Then, the next step is to teach the backend how to deal with libraries;
for genc, this would probably mean not to mangle functions names, to
create a companying .h and to modify the Makefile to produce a .so
instead of an executable.
About name mangling: one possible solution could be to mangle the names
as now and put some #define in the .h to allow the programmer to use
non-mangled names. Probably this is the less invasive solution.
More information about the Pypy-dev