On Sat, 6 Feb 2021 10:46:54 +0200 Serhiy Storchaka firstname.lastname@example.org wrote:
05.02.21 09:51, Paul Sokolovsky пише:
a0 = 0 b0 = 10 while ((a1, b1) := phi([a0, a2], [b0, b2])) < 5: a2 = a1 + 1 b2 = b1 + 1
Such code quickly becomes unreadable. Especially if in real code function has additional arguments and names are longer that 2-3 characters.
But at least it fully corresponds to the original statements and control flow of the program, that's the point!
The following code is not much larger but more clear and extensible:
a0 = 0 b0 = 10 while True: a1, b1 := phi([a0, a2], [b0, b2])) if b1 >= 5: break a2 = a1 + 1 b2 = b1 + 1
As I mentioned in other replies, that's what I've been doing. But that does *NOT* correspond to the original program, or SSA conversion of it. Instead, it's SSA + random munging. And when debugging SSA, you may argue what's worse: to look at 3-stories phi's, or to look at the code structure which doesn't correspond to the input code.
But that's not the point. I now in https://bugs.python.org/issue43143 gave more down to earth example:
For as long as you agree that following is acceptable:
func(a := val)
, then I'd say it really doesn't make much sense to argue that following should not be acceptable:
min((b, a) := (a, b))