[Python-Dev] Re: Concerns about PEP 634

2021年2月06日 13:02:13 -0800

Who said "__future__"? I said "3rd-party library". Independent from the CPython 
project.
Maybe even a few of them -- to try out conflicting visions that emerged in the 
discussions.
On 06.02.2021 23:58, Steve Holden wrote:
My suggestion that it be introduced via __future__ due to its contentious 
nature met immediate resistance. No point going down that road.
Kind regards,
Steve
On Sat, Feb 6, 2021 at 8:15 PM Ivan Pozdeev via Python-Dev <[email protected] 
<mailto:[email protected]>> wrote:
 With such a large new area of functionality that's at odds with existing 
syntax and semantics and a lack of clear vision and
 agreement, it
 sounds like this would be better first added as a 3rd-party library to let 
the syntax and semantics mature. (To allow new syntax, it'll
 probably be parsing strings in that special syntax.)
 (At https://www.python.org/dev/peps/pep-0634/ 
<https://www.python.org/dev/peps/pep-0634/>, there's no indication that this 
option was
 considered.)
 On 06.02.2021 18:44, Mark Shannon wrote:
 > Hi,
 >
 > Since a decision on PEP 634 is imminent, I'd like to reiterate some 
concerns that I voiced last year.
 >
 > I am worried about the semantics and implementation of PEP 634.
 > I don't want to comment on the merits of pattern matching in general, or 
the proposed syntax in PEP 634 (or PEP 640 or PEP 642).
 >
 > Semantics
 > ---------
 >
 > 1. PEP 634 eschews the object model, in favour of adhoc instance checks, 
length checks and attribute accesses.
 >
 > This is in contrast to almost all of the the rest of the language, which 
uses special (dunder) methods:
 >  All operators,
 >  subscripting,
 >  attribute lookup,
 >  iteration,
 >  calls,
 >  tests,
 >  object creation,
 >  conversions,
 >  and the with statement
 >
 > AFAICT, no justification is given for this.
 > Why can't pattern matching use the object model?
 >
 > PEP 343 (the "with" statement) added the __enter__ and __exit__ methods 
to the object model, and that works very well.
 >
 >
 > 2. PEP 634 deliberately introduces a large area of undefined behaviour 
into Python.
 >
 > 
https://www.python.org/dev/peps/pep-0634/#side-effects-and-undefined-behavior
 
<https://www.python.org/dev/peps/pep-0634/#side-effects-and-undefined-behavior>
 >
 > Python has, in general, been strict about not having undefined behaviour.
 > Having defined semantics means that you can reason about programs, even 
non-idiomatic ones.
 > [This is not unique to Python, it is really only C and C++ that have 
areas of undefined behaviour]
 >
 > I can see no good reason for adding undefined behaviour. It doesn't help 
anyone.
 >
 > The lack of precise semantics makes programs harder to understand, and it 
makes the language harder to implement.
 > If the semantics aren't specified, then the implementation becomes the 
specification.
 > This bakes bugs into the language and makes it harder to maintain,
 > as bug-for-bug compatibility must be maintained.
 >
 >
 > 3. Performance
 >
 > PEP 634 says that each pattern must be checked in turn.
 > That means that multiple redundant checks must be performed on (for 
example) a sequence if there are several mapping patterns.
 > This is unnecessarily slow.
 >
 >
 > Implementation
 > --------------
 >
 > My main concern with the implementation is that it does too much work 
into the interpreter.
 > Much of that work can and should be done in the compiler.
 > For example, deep in the implementation of the MATCH_CLASS instruction is 
the following comment:
 > https://github.com/brandtbucher/cpython/blob/patma/Python/ceval.c#L981
 <https://github.com/brandtbucher/cpython/blob/patma/Python/ceval.c#L981>
 >
 > Such complex control flow should be handled during compilation, rather 
than in the interpreter.
 > Giant instructions like MATCH_CLASS are likely to have odd corner cases,
 > and may well have a negative impact on the performance of the rest of the 
language.
 > It is a lot easier to reason about a sequence of simple bytecodes, than 
one giant one with context-dependent behaviour.
 >
 > We have spent quite a lot of effort over the last few years streamlining 
the interpreter.
 > Adding these extremely complex instructions would be a big backward step.
 >
 >
 > Cheers,
 > Mark.
 > _______________________________________________
 > Python-Dev mailing list -- [email protected] 
<mailto:[email protected]>
 > To unsubscribe send an email to [email protected] 
<mailto:[email protected]>
 > https://mail.python.org/mailman3/lists/python-dev.python.org/ 
<https://mail.python.org/mailman3/lists/python-dev.python.org/>
 > Message archived at 
https://mail.python.org/archives/list/[email protected]/message/HC6XDUASX2EELTA4L5R73BSYNJPTAYNL/
 
<https://mail.python.org/archives/list/[email protected]/message/HC6XDUASX2EELTA4L5R73BSYNJPTAYNL/>
 > Code of Conduct: http://python.org/psf/codeofconduct/ 
<http://python.org/psf/codeofconduct/>
-- Regards,
 Ivan
 _______________________________________________
 Python-Dev mailing list -- [email protected] 
<mailto:[email protected]>
 To unsubscribe send an email to [email protected] 
<mailto:[email protected]>
 https://mail.python.org/mailman3/lists/python-dev.python.org/ 
<https://mail.python.org/mailman3/lists/python-dev.python.org/>
 Message archived at 
https://mail.python.org/archives/list/[email protected]/message/OGXG4TIZQ35QGZ23JNAP4OAGEEW4COUK/
 
<https://mail.python.org/archives/list/[email protected]/message/OGXG4TIZQ35QGZ23JNAP4OAGEEW4COUK/>
 Code of Conduct: http://python.org/psf/codeofconduct/ 
<http://python.org/psf/codeofconduct/>
--
Regards,
Ivan
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/42EAR6ECHWE5OG25QHHP56XOH7IFWPAA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to