Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:93918 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 44359 invoked from network); 12 Jun 2016 19:55:15 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 12 Jun 2016 19:55:15 -0000 Authentication-Results: pb1.pair.com smtp.mail=nikita.ppv@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=nikita.ppv@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.161.179 as permitted sender) X-PHP-List-Original-Sender: nikita.ppv@gmail.com X-Host-Fingerprint: 209.85.161.179 mail-yw0-f179.google.com Received: from [209.85.161.179] ([209.85.161.179:36817] helo=mail-yw0-f179.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 9B/F3-12403-32EBD575 for ; Sun, 12 Jun 2016 15:55:15 -0400 Received: by mail-yw0-f179.google.com with SMTP id v137so7994917ywa.3 for ; Sun, 12 Jun 2016 12:55:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=G+VGcDdr9okqBs8zd4ncGffdYFLMUqcrodE/5cER+JY=; b=BZ/riuyQznfd2Pf+pM9gJte6pEhFxCDz+B0YpA8OyDaXRWtCeJiNaGEGo6QBRrHQBF 6Xm08+YS9kKCgIYwo5qDsZczTpIv9ODtsrKi1EoXru+MnlDnQ6b7vDwNRVc60AmPhHvO wPpxUMcholVtiY/WG6Pl3+VJib83St4NoQmThWz52I67oOYYqBsip+VQb46fhVdLZ8sC UDVqVegQGaUoUJ6lAT8FUKNdcKaYYFQayOb0VNV96OoPBDuzKA/dhvyAN1lJNxaNNZ99 9oKhr4UbB56HL9Huvfa8CNLIiNd7nGa4Vxp+62hPFD+tkcjfwKxoLxmutmBoLgUPIWYw paLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=G+VGcDdr9okqBs8zd4ncGffdYFLMUqcrodE/5cER+JY=; b=B7qmdsuGXdDlNdvWTiXPySQMIpJzdJyRwMsvyr4qN58O27xCGnt0iGQaWeZI0U72Wz W3Z5vF73khl6/appr3n5p+fHoX431K2WLlltJjABsTUOXYjicuLNRgvWr3yIZ1Go/jt2 eUBmjof0dgaspDxb2/Mp6l1vqsqe0jXuC7hgfLAUVQ1rAI86/0xAfs/i6/n7sXXwtfaW wTaloZ51kcq6k7s1RhlLwHvd0b/D4AYi8g4VBewADfIFTg0CCM68MKKzpOrWMXi30LXS ZbdOPTk1zTzbjD/85bgDfdDEMEqW6GhTvaFqmVBo+tHt0RZZESnxJLwZk8zUv48oFSsb 5R2Q== X-Gm-Message-State: ALyK8tKptpdYWG8Bh9c3NlUrhjQwWB9M19yZW2wPLE0Z/IUYfXyAFwzpwdt5ejX1SHYjJ1/k1982514ieeYXEg== X-Received: by 10.37.98.141 with SMTP id w135mr6229962ybb.9.1465761311818; Sun, 12 Jun 2016 12:55:11 -0700 (PDT) MIME-Version: 1.0 Received: by 10.13.242.129 with HTTP; Sun, 12 Jun 2016 12:55:11 -0700 (PDT) In-Reply-To: <027a527e-0920-9e57-b2cc-60fcbfedb84e@gmail.com> References: <6c03dafd-093a-0087-6312-96fede93c5f0@gmail.com> <027a527e-0920-9e57-b2cc-60fcbfedb84e@gmail.com> Date: Sun, 12 Jun 2016 21:55:11 +0200 Message-ID: To: Rowan Collins Cc: PHP Internals Content-Type: multipart/alternative; boundary=001a1142847e510b3205351a266f Subject: Re: [PHP-DEV] Is the "No BC Breaks in Minor Releases" policy enforceable? From: nikita.ppv@gmail.com (Nikita Popov) --001a1142847e510b3205351a266f Content-Type: text/plain; charset=UTF-8 On Sun, Jun 12, 2016 at 8:21 PM, Rowan Collins wrote: > On 12/06/2016 18:20, Nikita Popov wrote: > >> On Sun, Jun 12, 2016 at 6:42 PM, Rowan Collins > > wrote: >> >> tl;dr: >> >> - We have an RFC [too_few_args] about to pass that seems to break >> our published Release Process. >> - Is the vote invalid, or do we need to change the Process? >> - The opinions of those who voted "Yes" are particularly requested. >> >> >> There is an increasingly higher barrier for backwards compatibility >> breaks going from a major version to a minor version to a patch release. A >> strict policy of "no BC breaks" is completely and utterly untenable, >> because even relatively simple fixes of obvious bugs have some degree of BC >> impact and, with a user base as large as PHP has, even changes that are >> "extremely unlikely" to affect anyone, probably do affect someone. >> > > I absolutely agree, and acknowledged this in my message. > > > So in the end it comes down to case-by-case decisions, with increasingly >> higher thresholds when moving to the right of the dot. >> > > An elegant way of putting it. :) > > > The whole idea of saying "the vote on the [too_few_args] RFC is invalid >> because it violates the release process" sounds ludicrous to me -- because >> the vote is there *precisely* to ascertain that this BC break is considered >> acceptable for PHP 7.1, based on the cost-benefit analysis of the >> individual voters. >> > > My question, I guess, is what weight does the release process have in that > decision? Or, to put it another way, who is it addressing? I guess you're > saying that it is not the RFC author, but the individual voters, who are > required to understand the policy, and enforce it against themselves, as it > were. > Yeah, that's basically how I think about it. The voters use their best judgment to determine what degree of breakage is acceptable for a particular version. Of course the RFC author should also use their judgement to determine whether a proposal is worthwhile at all. > The only difference between the [too_few_args] RFC and a number of other >> recent BC-breaking RFCs, including void types, nullable types and invalid >> numeric string warnings, is that this RFC includes "only" the BC break, >> while many other RFCs include a minor BC break as part of a larger change. >> > > No, the biggest difference is that all three of those RFCs extensively > discusses the BC issues, and sets out a position as to why the break is > acceptable in this case. too_few_args has a single sentence which amounts > to a shrug of the shoulders. > > > However in the end the same applies to too_few_args: It's a cost-benefit >> tradeoff and as of now, the supermajority of voters have made this tradeoff >> in favor of benefit. >> > > A policy of "every BC break should be analysed as a cost-benefit tradeoff" > might perhaps be a better one than we have now; it is not, however, what is > written in the Release Process RFC. > > To be clear, this RFC means that code which ran fine under 7.0 will > produce fatal errors under 7.1, not because of conflict with a new feature, > but because of a deliberate change whose only purpose is to produce those > errors. As a user, that feels like breaking the promise expressed by the > release process. > In that it is similar to the RFC on introducing warnings for invalid numeric strings in arithmetic operations. Sure, that one introduces only a notice while this one throws an exception. Most people probably don't share this opinion, but I think there's actually very little difference between the two for a professional codebase, which (obviously ^^) has a zero notice/warning policy. In either case it's something that must be fixed. (This means that the breakage, if defined as "work required for a deployable upgrade", is probably much much higher for the invalid arithmetic RFC, even though the breakage as in "how badly is the code broken if I do nothing" is smaller.) > On a specific note, I would be interested to know why you think the change > is justified. Is it because you think the affected code will be rare? Or > because the code is "broken" anyway? Is there some guideline we can > generalise, so that users, and future RFC authors, can know what is likely > to be accepted in a minor release? > A couple of factors involved here: a) As you say, if code is affected by this change, it's likely that the particular code segment was buggy and this bug has now been driven out of hiding. Note that this can happen not only in legacy code that categorically suppresses all warnings (and doesn't actually care if the code works or not), but also in reasonably modern code where a stray error suppression ends up affecting more code than indented. I specifically remember an instance of much head-scratching about code behaving "impossibly" due to a combination of runaway error suppression and this condition being only a warning. b) I don't think this BC break will affect a significant amount of code when migrating from PHP 7.0 to PHP 7.1. Code that is currently running on PHP 7.0 is unlikely in such a bad state as to be (negatively) affected by this. Code that is on older versions will have to be looking about for many other breaks while upgrading anyway. c) If you subscribe to defensive programming, the current behavior implies that you should actually be adding an assert(isset($param)) for each parameter to the start of your function, to ensure that your **required** parameters are really passed. WTF? If I can't rely on required parameters being required in this programming language, what can I rely on at all? I'm willing to accept a small degree of BC breakage to get rid of such nonsense. d) As the RFC mentions, the current behavior prevents certain optimizations. As someone who works on these optimizations, I'm unreasonably biased in favor of changes that benefit optimization :P I don't think this is a factor for most other voters. Regards, Nikita As a final thought, while looking through the archives, I notice that I > have gradually moved from "concerned" to "strongly opposed", and I regret > not considering the full impact sooner. I was perhaps carried along by > Dmitry's confidence that this was a "mini RFC" which could be pushed > through with minimal discussion (also technically a breach of policy: the > voting RFC appears to require a 2-week discussion for the same RFCs that > require a 2/3 majority). > > > Regards, > > -- > Rowan Collins > [IMSoP] > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > --001a1142847e510b3205351a266f--