Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:62929 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 93655 invoked from network); 10 Sep 2012 18:39:02 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Sep 2012 18:39:02 -0000 Authentication-Results: pb1.pair.com smtp.mail=pierre.php@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=pierre.php@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.223.170 as permitted sender) X-PHP-List-Original-Sender: pierre.php@gmail.com X-Host-Fingerprint: 209.85.223.170 mail-ie0-f170.google.com Received: from [209.85.223.170] ([209.85.223.170:41196] helo=mail-ie0-f170.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 2F/20-26944-5C33E405 for ; Mon, 10 Sep 2012 14:39:02 -0400 Received: by ieak14 with SMTP id k14so4205087iea.29 for ; Mon, 10 Sep 2012 11:38:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=LO4QccMG5pRsKS38f3nlGSM9Q2h7Q2Wo0Do/kwrZ2vA=; b=UheP9iunKViD9xNFS8Sgay/NBBbf+qjDbTuVSdCiUUsyOzJbMZu43ChlE3LFUKlgUK hjdfx1VpzyhAs2g7RZDrJJjKaz/gaGXZ2HLuvYlh9/vNk28nyKEKjcS3hd64gS+tFVlS p8p9VDmt4ealYm7IGAU8ZJ4HHStYETtLX+Vnx/4CR/sxYl3Ua2Ud0eW1No7RB0AreNqU ip1JeUKs2btFAAVFYdI9LMvlZsSK1Lh7Y5ufnxZ8Pg7GMyCpwiRufkG/ary9W5l5Qrv3 DmXzp1mvToAretSdxsxdHaJapRuVo9CccmC/ERw06DNxBwOoI8Ot3LCgcyqfzJKVkMRH I76g== MIME-Version: 1.0 Received: by 10.42.155.200 with SMTP id v8mr18290432icw.12.1347302338860; Mon, 10 Sep 2012 11:38:58 -0700 (PDT) Received: by 10.64.60.40 with HTTP; Mon, 10 Sep 2012 11:38:58 -0700 (PDT) In-Reply-To: References: Date: Mon, 10 Sep 2012 20:38:58 +0200 Message-ID: To: Anthony Ferrara Cc: jpauli , PHP Internals Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [PHP-DEV] What is our definition of a "Backward Compatibility Break" From: pierre.php@gmail.com (Pierre Joye) hi, On Mon, Sep 10, 2012 at 8:23 PM, Anthony Ferrara wrote: > Pierre, > > On Mon, Sep 10, 2012 at 1:54 PM, Pierre Joye wrote: >> >> hi, >> >> On Mon, Sep 10, 2012 at 6:28 PM, jpauli wrote: >> > Based on our recent discussion on #pecl , I'd like we clarify what we >> > think is a "BCB" (Backward Compatibility Break) as well as what "only >> > minor BC breaks" could mean. >> >> Change in phpinfo related stuff are minor. Adding a notice or warning >> is minor or irrelevant. Changing return values (like suddenly >> returning array instead of integer, f.e.), behaviors or similar things >> are not allowed in x.y+1. > > > I'm not so sure about that. Adding a warning or notice may actually cause a > lot of headaches. See what happened with call-time-pass-by-reference in > 5.3... All of a sudden a lot of code that worked fine is flooding logs with > new warnings... it does not break code, also that happens only and only from 5.x to 5.x+1 and should not happen from 5.x.y to 5.x.y+1 for example (or on very rare cases). > I guess my point is that the line between a BCB and a minor BCB is a lot > finer and a lot more subjective that it seems on the surface. Is adding a > new language feature with a new keyword a BCB (since existing functionality > using that keyword is now a parse error), We add new features, that's no BC break as the feature did not exist before. Keyword is a problem, but we have to live with for now. > My take on it is this: > > If you can solve the "break" using nothing but static analysis and a static > conversion "script", then it's a minor break. So new keywords would be fine > (you could find/replace function yield() with function yield2() really > easily). But changing the semantics of code (returning an array instead of > an int, changing how references are passed, etc) would require developer > interaction to fix, and as such would not be minor. > > And one point on what classifies as a BC break: Everything. Any change will > break BC in some way. Even adding a function is a BC break since existing > code may use the same function names. Why we added namespace, no issue (well for 5.3+ :). > Fixing a segfault is a BC break as > well, as it's changing the way it works. That's really a totally wrong example. Cheers, -- Pierre @pierrejoye | http://blog.thepimp.net | http://www.libgd.org