[Python-ideas] Re: New Tool Proposal
anthony.flury
anthony.flury at btinternet.com
Thu May 12 02:28:58 EDT 2022
On 10/05/2022 15:04, Dan Stromberg wrote:
>
> On Tue, May 10, 2022 at 3:15 AM Chris Angelico <rosuav at gmail.com> wrote:
>
> > It is often the case that developer write Code in Python and
> then convert to a C extension module for performance regions.
> >
> > A C extension module has a lot of boiler plate code - for
> instance the Structures required for each class, the functions for
> Module initialization etc.
> >
> > My Idea is a simple tool that uses introspection tools to take a
> Python module and to generate the relevant boiler plate for the
> module - including blank functions for the module classes and for
> methods. This tool would use type annotations (if given) to make
> sensible choices for parameter and attribute types, including
> using int and float directly rather than Internal objects
> (depending on tool options).
>
>
> Two things to say about this:
> 1) Sometimes abandoning a pure python module for a C extension for
> performance is a mistake - because Pypy is probably going to be much
> faster with the pure python module
Dan,
Thanks for your response, but I think PyPy will have a long way to go to
make JIT generated code more efficient than hand crafted C extension.
for instance PyPy will almost certainly be unable to determine if
integers, floats etc will need to use the Python runtime or can be
optimized to use direct C types, another example would be lists - there
are some cases where the C extension will always be a lot more efficient
using C arrays than using the C list runtime machinery.
While there might be some cases where PyPy will be more efficient, I
don't think that will be the case for all programs, and that ignores the
fact that PyPi has major issues with the CAPI.
> 2) I've had some luck using m4 to maintain a single source file that
> is used to automatically generate both pure python and cython. This
> is a little like using cpp in a C project.
>
> For examples of #2, perhaps see:
> https://stromberg.dnsalias.org/~strombrg/treap/
> https://stromberg.dnsalias.org/svn/rolling_checksum_mod/trunk/
> https://stromberg.dnsalias.org/~strombrg/sort-comparison/
>
> It's often nice to keep the lines of the pure-python and cython having
> a 1-1 relationship, so that tracebacks report useful line numbers
> either way. However, in the treap example I've dispensed with that
> because some methods were almost identical but had some boilerplate -
> and m4 was able to handle that nicely at the cost of lines being 1-1.
>
> HTH
--
Anthony Flury
*Moble*: +44 07743 282707
*Home*: +44 (0)1206 391294
*email*: anthony.flury at btinternet.com
More information about the Python-list
mailing list