[pythran] Re: Future plans?

  • From: Pierre Augier <pierre.augier@xxxxxxxxxxxxxxxxxxxxxx>
  • To: pythran@xxxxxxxxxxxxx
  • Date: Tue, 27 Nov 2018 16:35:43 +0100


Le 27/11/2018 à 14:33, Neal Becker a écrit :

Great to hear!
My usual use case does NOT have any inheritance (inheritance is overrated).  Classes are just used as containers to maintain state (data).  This matches a paradigm where a system is composed of objects that have some internal state (e.g., parameter settings).

On Tue, Nov 27, 2018 at 8:28 AM serge guelton <serge.guelton@xxxxxxxxxxxxxxxxxxx <mailto:serge.guelton@xxxxxxxxxxxxxxxxxxx>> wrote:

    On Tue, Nov 27, 2018 at 07:52:34AM -0500, Neal Becker wrote:
    > Dare I ask, is there a plan to support classes in the future?

    Not in the very near future, but it's a mid-term goal to support,
    say, data classes or « class without inheritance », or some
    simplified version of a class. The typing system used by Pythran
    needs to be enhanced, and when that task pops up, making the
    system extendable would pave the way for basic class support.
    Until then, collecting use cases would be a great idea: can you
    open an Issue where you, and eventually other pople, would provide
    examples of minimal class support requirements?

I use a lot classes with Pythran, in particular in https://bitbucket.org/fluiddyn/fluidsim

Support for proper data classes (https://docs.python.org/3/library/dataclasses.html) by Pythran would really be nice but I guess it is very difficult and not for tomorrow...  Wolf Vollprecht wrote that he "feel[s] like it could work out of the box, at least for single inheritance." (https://twitter.com/wuoulf/status/1062282912714973184) I have to say that I don't understand how it could work. I think if we have classes in Pythran we **need** simple inheritance (like this https://gist.github.com/paugier/7f9db3a3690758483108788d124e441a). Otherwise, I don't really see the point of having Python classes in Pythran... And without this, it would be very error prone: the same code leading to very different behaviors in Python and in Pythran.

That said, I think there is the same problem with cdef Cython classes ("built-in type"). But Pythran (supporting a subset of Python) is not Cython (a superset of the Python language). Since it is not possible to define "built-in types" in pure python (tell me if I'm wrong), it would be strange to be able to do it with Pythran, especially with the same Python syntax used to defined Python classes. At least we would need a special API to define such classes in the Pythran file (something like `class MyType(pythran.buildin_type):`). Note that it should be possible today to define in Cython built-in types with code using Pythran.

Sorry to insist with fluidpythran but there is already an API to use Pythran in Python classes by defining blocks of code compiled by Pythran:

https://fluidpythran.readthedocs.io/en/latest/#command-pythran-block

Moreover we could easily implement this (pythran_def and cachedjit decorators for methods):

https://fluidpythran.readthedocs.io/en/latest/#python-classes-pythran-def-for-methods

I'm pretty sure I'm going to implement it (for the simple case without method calls) because it would simplify a lot of code in FluidDyn packages.  I just don't know when :-) Now I think I need to slow down with fluidpythran until I get at least a first feedback on this project :-)

Note that it seems to me that @pythran_def / @cachedjit for methods of Python classes is MUCH simpler to implement than classes in Pythran. I think for most cases, @pythran_def / @cachedjit for methods would really be sufficient.

Python is bad for numerical kernels and for these parts Pythran is really useful. For the pythonic soup around the numerical kernels, Python is usually fast and good enough (especially with PyPy).

To summarize,

- I think we should be able to define Python classes using Pythran in Python with a nice Python API (for example with fluidpythran)

- I guess we can already define build-in types using Pythran with Cython

- I'm a little bit skeptical about defining build-in types with Pythran (we have Cython for that + it would break the "Pythran supports a subset of Python" assertion, except if we have a Pythran runtime API to be able to execute with the Python interpreter code in not-compiled Pythran files (pythran.buildin_type), but it is against Pythran principles)

- Proper Python classes in Pythran files seem very complicated. Pythran should be able to go back in the Python world and it is also against Pythran philosophy.

Pierre

Other related posts: