[Python-ideas] Statements vs Expressions... why?
Bruce Leban
bruce at leapyear.org
Sat Sep 13 21:27:06 CEST 2008
On Sat, Sep 13, 2008 at 9:02 AM, Cliff Wells <cliff at develix.com> wrote:
> Let's use your example from above: a+b vs add(a, b)
>
> a + b is the *exact* semantical equivalent of add(a, b). They do the
> same thing, they can be used in the same contexts. The + operator is
> pure semantic sugar (and well-used sugar too).
>
First, + is *syntactic* sugar not semantic sugar. Syntactic sugar is
something that changes the appearance but not the semantics.
C uses semicolons and Python doesn't. Is that syntactic sugar? Can I just
ask C to remove the "restriction" that semicolons are required without
defining precisely what that means? If I do, then I end up with something
like Javascript's semicolon rule which is confusing and error-prone. No
thanks.
Now let's imagine things aren't quite so equivalent. a+b has the same
> result as add(a, b), except you can only use the + operator in one
> particular context: assignment. It cannot be used say, with a comparison
> operator.
>
> So in my imaginary Python, this is legal
>
> x = 1 + 2
>
> but this is not
>
> if x < y + 1: pass
>
> and must instead be written
>
> if x < add(y, 1): pass
This is a strawman. You hypothesize that + would only be usable in the
context of "assignment". But that's not the context. The context is
expression. The semantics are the same.
Here's a real example: consider a language where +, *, etc. can only be used
in the context of augmented assignment. That is:
a += b
c *= d
etc. while I have to use functional syntax everywhere else:
x = add(a,b)
y = mul(c,d)
etc. Now I propose improving this language by eliminating the "restriction"
that +, * etc. can only be used in assignments.
You ask me to define the syntax and semantics of these operators and I brush
that off as unimportant. All I'm advocating is "lifting a restriction" in
the language. I'm unifying syntax not adding complexity, right? No need to
explain pesky details.
No. That's ridiculous. You might be surprised when you use my new features
that
x = 2 * 3 + 4
y = 2 - 3 + 4
sets x to 14 and y to -5 but that's not my fault. (And lest you say this is
a strawman and no one would consider any value other than 10 and 3, go look
at http://tinyurl.com/27ttcy.)
This is what you're doing. If you can't precisely define how the language is
different with your proposed change, then it's not worth discussing. You can
do that with a formal definition as I suggested or by actually implementing
your changes as Guido suggested. You can't do it by insisting that no one
understands what you're talking about.
--- Bruce
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20080913/3e701c0c/attachment.html>
More information about the Python-ideas
mailing list