[Python-ideas] Technical possibilities for a syntax [was: Reverse assignment operators ...]
Steven D'Aprano
steve at pearwood.info
Thu Nov 17 07:30:34 EST 2016
On Thu, Nov 17, 2016 at 12:07:34PM +0900, Stephen J. Turnbull wrote:
> Nick Timkovich writes:
>
> > I think the best way to remove compound operators would be to go
> > back in time and hit Dennis Ritchie with a bat at the exact moment
> > when the notion of them crosses his mind.
>
> True enough as a concept, but Python didn't have to implement them for
> immutables. It might have been interesting to allow in-place
> operations only for mutables.
By definition, you can only perform in-place operations on mutables.
But I guess you are talking about the syntax. Should += raise an
exception if the assignment target is immutable? Problem is, how is the
Python interpreter supposed to determine whether or not the target is
immutable or mutable?
There's no isinstance(obj, Immutable) and I doubt there ever will be.
More importantly, banning immutables would immediately prohibit the
number one most common use of augmented assignment, and probably the
largest motivation for the feature:
x += 1
> Dunno if Guido thought of that at the time, and I suspect that a lot
> of the voices that convinced him to go against his instincts wanted
> them specifically for integers (a lot of people wanted "++" and "--",
> too). So even if he did think of it, it might not have satisfied the
> proponents that their needs were being addressed.
Indeed. Supporting `alist += [x]` but not `x += 1` would have been
deeply unsatisfactory.
I think the status quo is actually very clever: augmented assignment is
broadly equivalent to the expanded assignment:
obj += foo
=> obj = obj + foo
except that the target obj has the opportunity to optimize it to an
in-place operation, even if that makes the semantics slightly different
from the ordinary & operator.
> > Except Perl.
>
> Please don't.
I don't think there is any need for that. No harm is done by a little
light-hearted banter relating to the rivalry between programming
language communities. In the big picture, a bit of friendly rivalry
probably does both communities good.
Regardless of what virtues Perl may or may not have, in some ways the
philosophy behind Perl is dramatically opposed to that of Python. Many
of us like Python code because it goes against Perl's ideals. We
discourage many of the things that Perl and its culture encourages:
terse, long one-liners, heavy use of regexes, heavy use of sigils and
symbols, "clever" code, and More Than One Way To Do It. There's a
natural rivalry between Perl and Python.
We should be permitted to criticise other languages, and even dismiss
them as useless. Programming languages do not have the assumption of
dignity owed to human beings.
Nick's dismissal of Perl was obviously intended as light-hearted and not
entirely serious. This is an informal forum, a mailing list, and
throw-away comments intended as humour shouldn't be held to the same
standard as serious statements intended as part of a logical
argument. Had Nick said "Python should not do X, because Perl does it
and nothing Perl does is of any value at all" then we'd be justified in
asking him to defend his claim, or to simply dismiss it as obviously
ridiculous. But he didn't.
I doubt Nick meant that Perl was literally lacking in any redeeming
features: exaggeration and hyperbole are time-honoured forms of humour.
His comments weren't disruptive and they most certainly were not
attacking anyone. It would require the most extraordinarily thin skin to
take that as an attack against people who use Perl, and even if somebody
did, well, this is not a support group for people so lacking in
self-esteem that their self-image is equated to their choice of
programming language.
(I believe we've already had to ban, or at least warn, one regular to
this list under the terms of the CoC, because he couldn't distinguish
ill-founded criticism of Python the language from criticism of the
people designing and using the language, and he responded with personal
attacks.)
I'm sorry that I've written more words defending Nick's throw-away two
word comment than you expended in lightly chastising him. But I didn't
want to just say that I disagreed with you -- I wanted to give the
reasons why I support our right to light-heartedly disrespect other
languages.
(And of course you're right, Python has borrowed regular expression
syntax and the Cheeseshop from Perl, and possibly more.)
--
Steve
More information about the Python-ideas
mailing list