Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:108857 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 43128 invoked from network); 4 Mar 2020 23:53:31 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 4 Mar 2020 23:53:31 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id E3AE81804D9; Wed, 4 Mar 2020 14:12:58 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS8560 212.227.0.0/16 X-Spam-Virus: No X-Envelope-From: Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS; Wed, 4 Mar 2020 14:12:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583359976; bh=SwFY0F4SJA60xA3YnDBESz+cvr+T7ZvvyUvvaf6kTsY=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=IEqTRdzPefpwjf0YPjjNabn2e+FLxQ3Hw9g3Yqdi2+DMij7uj4+P1TfX7RFaWJYWU UVrqdAM+iXqpimbK85IZb/MKLfrPxuo1X7Jc6wfrEfNmmLZjzuxnPCAxxtfMfWEcR5 VfsajSr7h56NiUU/XPgp/DpFduTBpU0wSux1KuK0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.2.130] ([84.179.232.93]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MMXQ5-1iu0FU40MJ-00Jdt9; Wed, 04 Mar 2020 23:12:56 +0100 To: Nikita Popov , Sara Golemon Cc: PHP internals References: Message-ID: Date: Wed, 4 Mar 2020 23:12:55 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: de-DE Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Vb+p55SkykVwyy7gGuDb6DNYWVCMCsXAgyQnFjjW4Rsd3z5FdsZ UmMmHNoGxXNnzDGO0M1mPjZ8z0FlevNgV+PBeEDirga+uy1PuU0aIQuecLsU5PubWfJ4BG0 8Ut75BHQfjdggfbRODTaTVcCGjvxguxeFCxocRxl/6oajVVpEmkzeb0C3MnIxdNFHNIdrG4 nytryzmbP8yfMO+PDKIFw== X-UI-Out-Filterresults: notjunk:1;V03:K0:LQ//dQaf3eA=:t0rc4qu6o4xLRePia/zeTB Ii8538cZ4y7zrbRxxY5fTNbCvAY7pHvhOGC2y9UWRltkOFN8X0lIHSbS3lhD/1ikgLjDwu1yg fFh6/lCR2FLhxSklkUV5GP/5S1zIHqpeHxnSnYJZFClE+K5MNfx9aitfwXk4+AtSYGzAXC4WQ yBvYO1vZXni0WPzy6MxXx8g1jMATmFax7YEgUvPFG6mOEWV1J4I/m1XddDeI7UguEtpba99TQ W+ogIrENOa7z/9e2kG7gOvPMdda0bn4rozx1nMyqdYDHwt0M2dD+8e4etqDexvy6YZnipRLmk m73zcdtqnR/2Hfstew1KD3col+S1Q0U/T6f2AV7oXnhsuqggpE8wuLUYfPhPvmVhi7lmuRY2k xzxMrvdGQNClo7nU4GDJYhyRUeaXf3txIkYuKVCLpNDCQ34Jcnc4wGH/53hpRwGOn8xxbBWe+ CJfznv/z4HFyPg/1kda3XlsgxJdpjw4viC9pKmHeE12DRI86RdgPJFTmHOlm1W4qZFqK1GN71 OVQKyEf1TDXImMpNYvky6ZO0QC0LrZO3T8tw3pstVUDk+cKCroFOqp0TupejDvk/W45gECbeL cTEbKRNQDew1JFIVoEoa+APzRbp3Xjb3wrTt1+J6XShU+iv7gmX0u9MNxjW7FH/+j0IqFiQFG 3wkKPpBNegudQBWeuCWrA5/SAq9TbUZzDy9d4n85kxNHOucFmRuxGVE0rjmQCLtKG5dt9X0EM ZoBSQJ6vLkixN0o4QwoSFerRJCECTrkOdjpGQzOFz3vOLOt1ZTbeuKyxUU0QR448UAcHkOso4 kne4toxHuLBO8efv2pRtp4jvpHz+kGhYj4nPfEV82i/5cDUnwreq/Zo74B8sKeegI9dxnKIMr eFqJeXx55vZ27R9qKyiFQ0uxVSnk36raAIaO7hKDYnYyQ9OelpD4ouPlSnNtmbuGbNKunOMPo O7KkipR0SISK47YPzEJz6X0fvC4aPkIPvK/A+ElFMcLEdyo2a8oGzLj0CxL2gzU+M42p8lcVJ tQn8fpxNazAp3TGKpEC9vHlggnv2IJgD/YO6OEiUxeCsgLRjAA8iOgaHQGvv27BE/u9zjGF9y SOXeVPm6YuE5NH6DX0qA6UIu8AWSNflYMAK2iBsp0mopnrjdjE5qWndjx2o2Q2DNZRZrPlgQs mwXHfucMRWFqp9Ra8hRrkDoGuBeO8VJxs6JDpn+jKgEfg9A2YHnnJBWAEtuTtiQO1PdaLVsdN NDWx+MLyW5JaujE8b Subject: Re: [PHP-DEV] Make sorting stable From: cmbecker69@gmx.de ("Christoph M. Becker") On 04.03.2020 at 19:11, Nikita Popov wrote: > 1. As Tyson suggests, we can throw a warning if a boolean is returned fr= om > the comparison callback (probably with a check to only throw it once per > sort), to make it obvious what the cause is. > > 2. We can fix this transparently by doing something like this internally= : > > $result =3D $compare($a, $b); > if ($result !=3D=3D false) { > return (int) $result; // Normal behavior > } > > // Bad comparison function, try the reverse order as well > return -$compare($b, $a); > > That is, we will recover the full three-way comparison result from the > "greater than" result, by checking for both $a > $b and $b > $a. Given that we have internal classes which deliberately have such comparison behavior (i.e. returning 0 or 1, to signal that there is no order defined), e.g. Closures[1], I tend to prefer raising a warning instead of trying to recover. [1] =2D- Christoph M. Becker