On Tue, 30 Mar 2021 at 17:32, Brandt Bucher <brandtbuc...@gmail.com> wrote:

Hi Brandt,

> > Which requires the sympy class `Symbol` to "self" match. For `sympy` to 
> > support this pattern with PEP 634 is possible, but a bit tricky. With this 
> > PEP it can be implemented very easily.
>
> Maybe I'm missing something, but I don't understand at all how the provided 
> code snippet relies on the self-matching behavior.
>
> Have the maintainers of SymPy (or any large library supposedly benefitting 
> here) come out in support of the PEP? Are they at least aware of it? Have 
> they indicated that the proposed idiom for implementing self-matching 
> behavior using a property is truly too "tricky" for them?

Speaking as a maintainer of SymPy I do support the PEP but not for
SymPy specifically. I just used SymPy as an example of something that
seems like it should be a good fit for pattern matching but also shows
examples that don't seem to work with PEP 634 in the way intended. I'm
sure SymPy will use case/match when support for Python 3.9 is dropped
but I don't see it as something that would be a major feature for
SymPy users or for internal code. I expect that case/match would make
some code tidier and potentially it could make some things a little
faster (although that depends on it being well optimised - half a
microsecond might seem small until you add up millions of them). There
is a recently opened SymPy issue discussing the possible use of this:
https://github.com/sympy/sympy/issues/21193

Pattern matching and destructuring more generally are significant
features for symbolic libraries such as SymPy which has much code for
doing this and can also be used with other dedicated libraries such as
matchpy. Much more is needed than case/match for that though:
rewriting, substitution, associative/commutative matching etc. It's
not clear to me that core Python could ever provide anything new that
would lead to a groundbreaking improvement for SymPy in this respect.
The surrounding discussion of the various pattern matching PEPs has
led me to think of the idea of destructuring as more of a general
language feature that might not in future be limited to case/match
though. I'm not sure where that could go for Python but I'm interested
to see if anything more comes of it.

I like a lot of the features in PEP 634 and the way I see it this PEP
(653) underpins those. The reason I support PEP 653 is because it
seems like a more principled approach to the mechanism for how
pattern-matching should work that places both user-defined types and
builtin types on an even footing. The precise mechanisms (match_class,
match_self etc) and their meanings do seem strange but that's because
they are trying to codify the different cases that PEP 634 has
introduced. It's possible that the design of that mechanism can be
improved and there have been suggestions for that in this thread. I do
think though that it is important to have a general extensible
mechanism rather than a specification based on special cases.

I also think that the use of the Sequence and Mapping ABCs is a bad
idea on practical grounds (performance, circularity in the
implementation) and is not in keeping with the rest of the language.
ABCs have always been optional in the past: Python uses protocols
rather than ABCs (ducktyping etc).

Finally, speaking as someone who also teaches introductory programming
with Python then with *that* hat on I would have preferred it if none
of the pattern-matching PEPs had been accepted. The advantage of
Python in having a simple and easily understood core erodes with each
new addition to core syntax. For novice users case/match only really
offers increased complexity compared to if/elif but it will still be
something else that needs to be learned before being able to read
existing code.


Oscar



Oscar
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/GLIIJUWBY2RT734FCLVUYM3XB3RJWNYY/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to