This was intentional in PEP 572 so it is not a grammar bug fix.

Put your money where your mouth is, or become another armchair language
designer. Your choice.

On Sun, Feb 7, 2021 at 23:58 Paul Sokolovsky <pmis...@gmail.com> wrote:

> Hello,
>
> On Sun, 7 Feb 2021 13:10:55 -0800
> Guido van Rossum <gu...@python.org> wrote:
>
> > Hi Paul,
> >
> > I suggest that you just go straight to the PEP phase.
>
> Thanks. In all fairness, I don't expect immediate resolution to this
> issue. But I'm aware of out for at least a year, and keep returning to
> it (yes, in context of my SSA experiments). So, I proceeded to the next
> stage - bring it up on its own, then created a bug ticket:
> https://bugs.python.org/issue43143
>
> And my idea is to try to argue that it would be just a "grammar
> bugfix", similarly to already existing grammar elaborations for walrus:
>
> https://bugs.python.org/issue42316
> https://bugs.python.org/issue42374
> https://bugs.python.org/issue42381
>
> Granted, allowing "foo((a, b) := (b, a))" is a bit bigger change than
> allowing "foo[a := b]" instead of "foo[(a := b)]". But if people
> find assigning within index expression useful, up to reporting it, and
> then other people ack it and fix it, then why not fix parallel
> assignment case? Implementation-wise they *seem* to be of the
> similar effort/complexity - just a one-term grammar change. (I still
> need to run the testsuite, yeah).
>
>
> >
> > --Guido
> >
> > On Thu, Feb 4, 2021 at 11:54 PM Paul Sokolovsky <pmis...@gmail.com>
> > wrote:
> >
> > > Hello,
> > >
> > > Everyone knows how hard to find a compelling usecase for the
> > > assignment expression operator (":=", colloquially "walrus
> > > operator"). https://www.python.org/dev/peps/pep-0572/ examples
> > > never felt compelling and we all remember the split it caused.
> > >
> > > I finally found a usecase where *not* using assignment expression is
> > > *much* worse than using it. I'm working on SSA (Static Single
> > > Assignment,
> > > https://en.wikipedia.org/wiki/Static_single_assignment_form)
> > > conversion of Python programs, where there's a need to "join"
> > > dataflow of values from different control flow paths using a
> > > special function (Phi function). This "joining" itself creates a
> > > new variable, and of course, the original variable was used in an
> > > expression. We've got assignment in expression, assignment
> > > expression operator to the rescue!
> > >
> > > With it, a simple loop like:
> > >
> > > ----
> > > a = 0
> > > while a < 5:
> > >     a += 1
> > > ----
> > >
> > > becomes:
> > >
> > > ----
> > > a0 = 0
> > > while (a1 := phi(a0, a2)) < 5:
> > >     a2 = a1 + 1
> > > ----
> > >
> > > So far, so good. But semantics of Phi function is parallel
> > > assignment. No problem with Python either, "a, b = b, c" is exactly
> > > parallel assignment. So, let's try example with 2 variables:
> > >
> > > ----
> > > a = 0
> > > b = 10
> > > while a < 5:
> > >     a += 1
> > >     b += 1
> > > ----
> > >
> > > becomes:
> > >
> > > ----
> > > a0 = 0
> > > b0 = 10
> > > while ((a1, b1) := phi([a0, a2], [b0, b2]))[0] < 5:
> > >     a2 = a1 + 1
> > >     b2 = b1 + 1
> > > ----
> > >
> > > But oops:
> > >
> > > > SyntaxError: cannot use assignment expressions with tuple
> > >
> > > To reproduce in the REPL:
> > >
> > > ----
> > > >>> ((a, b) := (1, 2))
> > >   File "<stdin>", line 1
> > > SyntaxError: cannot use assignment expressions with tuple
> > > ----
> > >
> > > Why this accidental syntactic gap? Why assignment statement can do
> > > parallel assignment with a tuple on LHS, and assignment operator
> > > suddenly can't?
> > >
> > > Why the adhoc naming and conceptual shift on the AST level, when
> > > PEP572 explicitly talks about *assignment operator*, but
> > > corresponding node on the AST level is called NamedExpr? Why look
> > > at assignment expression as "name of expression" instead of
> > > assignment expression per se?
> > >
> > > It's of course not a problem to recast:
> > >
> > > NamedExpr(expr target, expr value)
> > >
> > > to
> > >
> > > NamedExpr(expr* target, expr value)
> > >
> > > in the ASDL (and it works out of the box), the point is that it
> > > should have been ExprAssign from the start (folloing the AugAssign
> > > and AnnAssign tradition).
> > >
> > >
> > > --
> > > Best regards,
> > >  Paul                          mailto:pmis...@gmail.com
> > > _______________________________________________
> > > 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/6IFDG7PAFPHVPGULANOQDAHP2X743HCE/
> > > Code of Conduct: http://python.org/psf/codeofconduct/
> > >
> >
> >
> > --
> > --Guido van Rossum (python.org/~guido)
> > *Pronouns: he/him **(why is my pronoun here?)*
> > <
> http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/
> >
>
>
>
> --
> Best regards,
>  Paul                          mailto:pmis...@gmail.com
>
-- 
--Guido (mobile)
_______________________________________________
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/K5LOV2FODXVVZQ6HZ5VS2UCXJG3J5OYE/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to