Re: Operator precedence is undefined?

From: Date: Sat, 20 Jul 2013 04:44:46 +0000
Subject: Re: Operator precedence is undefined?
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
What's undefined isn't the relationship between preinc/postinc and add.
 What's undefined is the use of multiple preinc/postinc operators within a
single expression (preincrements in particular).  Our parser grammer, as it
currently stands, does have a predictable order, but that is a side-effect
of implementation.  The language's definition of order of resolution of
multiple preinc/postinc elements within a single ticked statement is that
they are undefined.  And *that* is what made your *particular* change to
the documentation incorrect.

If you'd like to define behavior for:  echo ++$a + 1;  then that's a
different matter.  Defining the behavior of ++$a + $a++, however is
inviting misunderstanding*.

What was inappropriate, was asking for comment, receiving comment which
cited an issue, then committing without discussing that issue first.

-Sara

* Even if, technically, either order of evaluation will result in the same
answer for this contrived expression.  ++$a * $a++ is a more obviously
ambiguous answer for a language which explicitly does not define an order
of resolution.


On Fri, Jul 19, 2013 at 9:28 PM, Yasuo Ohgaki <[email protected]> wrote:

> Hi Sara,
>
> 2013/7/20 Sara Golemon <[email protected]>
>
>> On Fri, Jul 19, 2013 at 7:16 PM, Yasuo Ohgaki <[email protected]> wrote:
>>
>>>
>>>
>>> If there aren't comments, I'll rewrite the example.
>>>
>>>
>>> There were comments.  I explicitly told you that that the behavior is
>> defined as undefined.  You CHOSE to ignore that comment.  You CHOSE to
>> break the documentation.
>>
>
> If there is defined precedence, arithmetic operation should follow it.
> If there is exception, it should be documented.
>
> I don't understand why/how the arithmetic operation can be
> ambiguous with defined precedence. (++ and -- are higher than +)
>
> $a = 1;
> echo ++$a + $a++;
>
> should always print 4 with current PHP precedence definition.
> If it does not, it's a bug in language.
>
> // mixing ++ and + produces undefined behavior
> $a = 1;
> echo ++$a + $a++; // may print 4 or 5
>
> I don't see any reason it became undefined.
> If this kind of simple precedence is broken, how programmers write
> code and/or trust the language?
>
> http://3v4l.org/mR4da/vld#tabs
>
> This site seems support PHP 4.3.0 to PHP 5.5.0 and opcode looks
> fine. Am I missing something?
>
> If you would like to suggest use of (), it should be done differently.
> IMHO.
> The comment only ruins PHP's reputation as language.
>
> Regards,
>
> --
> Yasuo Ohgaki
> [email protected]
>


Thread (30 messages)

« previous php.internals (#68251) next »