Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:68255 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 36315 invoked from network); 20 Jul 2013 05:33:13 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Jul 2013 05:33:13 -0000 Authentication-Results: pb1.pair.com smtp.mail=php@golemon.com; spf=softfail; sender-id=softfail Authentication-Results: pb1.pair.com header.from=php@golemon.com; sender-id=softfail Received-SPF: softfail (pb1.pair.com: domain golemon.com does not designate 209.85.220.54 as permitted sender) X-PHP-List-Original-Sender: php@golemon.com X-Host-Fingerprint: 209.85.220.54 mail-pa0-f54.google.com Received: from [209.85.220.54] ([209.85.220.54:37165] helo=mail-pa0-f54.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 7C/CE-13120-7112AE15 for ; Sat, 20 Jul 2013 01:33:12 -0400 Received: by mail-pa0-f54.google.com with SMTP id kx10so5169264pab.41 for ; Fri, 19 Jul 2013 22:33:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:sender:x-originating-ip:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :x-gm-message-state; bh=etw/P6dN/mqvwGEHcLNtiO8Fmm3Tc92DejaZbqG3eaU=; b=kG3jf/LJOgWnsTiXiOlAj6d7kOeHBFw7zBD4EmAnNh9HjT7og+17lEG+1XaQiZ4gXs quqaZiOF6awVV/2UhW9/Sz0kAy7PLLkfImlYpO2PA04b5WmSJOONkiqhTWAg6dC1obSw UZbHuih6dhj6JAVJhfFFxfUYuk0hc7/xe5UBpYJKVxL/q6FJtMs6iDn8llE3iWKAwNGq i8U9m6F+c9v417n4IpY+TfDT5f8ISWMryXXPYclTu1VKQKvbEh2hE7hDRZgoK6U+UlVK YcIBfUZF9y2Yo1H2wCTiTghis7DavsmxHp7Avqsfwc/jgr3e5C4ybNSdRL99NDvpCZ6w SeVg== MIME-Version: 1.0 X-Received: by 10.68.176.132 with SMTP id ci4mr20699922pbc.7.1374298388944; Fri, 19 Jul 2013 22:33:08 -0700 (PDT) Sender: php@golemon.com Received: by 10.70.128.71 with HTTP; Fri, 19 Jul 2013 22:33:08 -0700 (PDT) X-Originating-IP: [98.210.180.187] In-Reply-To: References: Date: Fri, 19 Jul 2013 22:33:08 -0700 X-Google-Sender-Auth: 2mSr1oGfccnaHL9EOvS05KeJCi4 Message-ID: To: Sherif Ramadan Cc: Yasuo Ohgaki , PHP internals Content-Type: multipart/alternative; boundary=047d7bd6b50a49f2a804e1eac7dc X-Gm-Message-State: ALoCoQne/isn2O6775yv5NTm5gFsfVuCIh+FWH24gIDUnGYOMV8WJLajUUfCJcR9jOSD6Aenj0DP Subject: Re: [PHP-DEV] Operator precedence is undefined? From: pollita@php.net (Sara Golemon) --047d7bd6b50a49f2a804e1eac7dc Content-Type: text/plain; charset=ISO-8859-1 Your example "-$a * $a" isn't at all the same because -$a doesn't produce side-effects, only output. I never said that the compiler might magically produce differing results for the same input. I said that the language's definition does not declare a defined behavior for such expressions with combined side effects. As to reverting commits. When the initial commit was made in haste during an active discussion, a revert is entirely appropriate and has nothing to do with placing one's opinion over another's. It has to do with placing the process of consensus building over unilateral cowboy commits. -Sara On Fri, Jul 19, 2013 at 10:08 PM, Sherif Ramadan wrote: > > Sara, > > On Sat, Jul 20, 2013 at 12:44 AM, Sara Golemon wrote: > >> 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 >> > > I'm sorry but I can not find any evidence of how that is undefined. The > operators are right-associative, with a defined level or precedence. Their > operands are well defined and their return value in the expression is > determined by the compiler, not the parser. In this sense the compiler > always executes those opcodes first and returns a temporary variable. > > >> (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. >> > > The parser grammar in general is pretty muddled, I will agree with that. > However, the precedence order here is well defined within the expression. I > can not see any condition under which the compiler will introduce > unpredictable order of these opcodes or their results. > > >> >> 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. >> > > By that logic we should indicate that -$a * $a is also undefined behavior? > I know the parser grammar is not well-defined and I'm taking this fact into > consideration, but here we are talking about operators which will compile > down into very much well-defined opcodes and have a predictable order of > resolution. It's quite possible that someone could introduce a change later > on that will cause a different result, but the likelihood of that becoming > a reality is slim-to-none. > > I'm not a fan of getting into cat and mouse games over these types of > discussions, however. I posed my opinion on this matter and I refuse to > overwrite someone's commit because I feel my opinion is the only one that > counts. I am certainly not above being wrong. I just want to be sensible. > > >> >> >> On Fri, Jul 19, 2013 at 9:28 PM, Yasuo Ohgaki wrote: >> >>> Hi Sara, >>> >>> 2013/7/20 Sara Golemon >>> >>>> On Fri, Jul 19, 2013 at 7:16 PM, Yasuo Ohgaki 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 >>> yohgaki@ohgaki.net >>> >> >> > --047d7bd6b50a49f2a804e1eac7dc--