Re: [RFC] Comparable: the revenge
| From: | Nikita Popov | Date: | Fri, 20 Feb 2015 13:20:48 +0000 |
| Subject: | Re: [RFC] Comparable: the revenge | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-83296@lists.php.net to get a copy of this message | ||
On Thu, Feb 19, 2015 at 10:40 PM, Adam Harvey <aharvey@php.net> wrote:
> Hi all,
>
> Those of you with long memories will remember that I proposed a
> Comparable interface way back in the pre-5.4 days, but withdrew it
> when it became obvious that there was no consensus for it as a feature
> and that a vote was likely to fail.
>
> RFC: https://wiki.php.net/rfc/comparable
> PR: https://github.com/php/php-src/pull/1097
>
> Why reanimate it now, I hear you ask? I think that comparisons have
> only become more prominent in the language: we now have a spaceship
> operator for explicit comparisons, yet the behaviour of object
> comparisons can be obscure, to say the least, and the user has no
> control over how their objects are compared.
>
> At this stage, I intend to put this up for a vote on March 5 (vote
> ending March 12), with the obvious endgame being that this would be
> included in 7.0.
>
Some technical notes on the RFC text:
* "How it is ensured that if $a < $b then $b > $a?" The RFC claims that it
is up to the developer to ensure this, however I don't think this is true.
As far as I know PHP will implicitly enforce this. It would be good if you
could double-check the behavior.
* "If both $a and $b are objects with different compare functions, how it
is determined whose function is used" Here you answer that the left operand
wins. Once again I am unsure whether this is true - I'd assume that for >
and >= the right operand wins.
* I would appreciate a note that indicates how non-total /
non-trichotomous comparisons can be implemented, namely by returning 1
irregardless of order. You can use a subset-relationship to illustrate this.
* Have you considered the impact on exception-safety this may have? Did
you verify that all places where compare_function (or derivatives) are used
are exception-safe?
Nikita