[Cython] Utility Codes and templates

mark florisson markflorisson88 at gmail.com
Tue Jul 26 10:58:16 CEST 2011


On 26 July 2011 08:50, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Robert Bradshaw, 26.07.2011 07:00:
>>
>> On Mon, Jul 25, 2011 at 9:48 PM, Vitja Makarov wrote:
>>>
>>> I think that would seriously help with  moving shared C-code into
>>> cython library (.h and .so).
>>>
>>> Some things like generator class implementation and cyfunction could
>>> be move into .so file.
>>
>> Yes, that would be good.
>
> Well, *if* we find a way to make sure the additional modules get properly
> distributed. It's not obvious to me how to do that, certainly not in a
> cross-package way, and not even in a per-package way, as that would still
> require some kind of interaction with distutils and maybe even changes to
> the users' setup.py scripts (hopefully in a way that doesn't require them to
> know what exact additional modules will be generated).
>
>
>> Of course we don't want a single .so file for
>> every tiny chunk of utility code, but one needs to be careful lumping
>> them together as well (e.g. things may compile differently depending
>> on the set of headers included in the .pyx file). To do this right I
>> we need to compile things at a higher level than module-by-module with
>> Cython.Build.cythonize or similar.
>>
>> Certainly CyFunction and the generator class are easy and high-benefit
>> targets (compared to, e.g. tuple indexing utility code).
>
> Now that we have a way to group utility code in a single file, including
> automatically resolved dependencies to other files, it should be trivial to
> take such a file and to compile it into a separate module. Cython modules
> would then trivially export their public names anyway, and utility code in C
> files could have an additional Cython wrapper file that would simply depend
> on the C file and that properly exports the C functions through a Python API
> and inter-module C-API.
>
> We could even write empty utility files that only contain dependencies, thus
> grouping together multiple utility files to one larger module.

As you said earlier, you'd lose the inline functionality though. But I
suppose we could put inline utilities in a header and non-inline
utilities in .so files. I'm then not sure how to prevent compiler
warnings for unused static inline functions though...

> Stefan
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel
>


More information about the cython-devel mailing list