On 16 Jul 2014, at 02:51, Bishop Bettini <bis...@php.net> wrote:

> Hi Andrea,
> 
> TL;DR -- I agree with the principal but want implemented as the infix
> operator %% with a test for PHP_INT_MIN %% -1 === false (and a E_WARNING).

%% is perhaps the only good non-keyword syntax choice. I like that.

> As a user, I could implement intdiv and get the same functionality as
> proposed:
>    function intdiv($n, $d) { return (int)($n / $d); }

You could, yes, but it wouldn’t return the correct result beyond 53-bit 
integers, and I’m not sure it would handle $x/-1 particularly well.

> 
> Heck, I could even simplify further:
>    function intdivmod($n, $d, $m = 1) {
>        return (int)($n / $d) % $m;
>    }
> 
> Though an internal implementation would be faster and would bypass the
> float truncation issue (which IMO is a separate issue and neither a pro nor
> con for this RFC),  I feel like we need to confer additional benefit if we
> implement this in core.
> 
> Specifically, I'd want this implemented infix.  Let's call it // for now.
> I'd like to be able to:
> 
> $x = 247 // 5;
> $x //= 5;
> 
> The functional notation doesn't afford assign equals.  It collides with
> user functions.  It complicates expressions.  (I also don't like pow()
> functionally and wish PHP had an operator like ** for powers.)  So, why not
> implement this as an actual operator?

PHP *does* have an operator “like **” for powers… the ** operator. Did you 
somehow miss that RFC passing? :)

> 
> As far as an operator, that's trickier. // and \ would be most like
> existing languages, but those are problematic as already stated.  We could
> overload /, relying on the left and right operands to be int to induce
> integer division... but I'm pretty sure that would be more hassle than it's
> worth.  So the best I can think of is %%.  That seems ok to me, since there
> is some family resemblance between modulus and integer division.

Right. This is just returning the other part of an integer division, the actual 
result itself, not the remainder.

> Finally, I think a test on the other side of the spectrum is needed:
> PHP_INT_MIN %% -1.  Mathematically that should be PHP_INT_MAX+1, I believe,
> so a warning and false seems appropriate.

The patch currently returns zero because I don’t want to yield a float like / 
does, but E_WARNING and FALSE sounds good, we do that for integer division 
anyway.


Do others on internals think that %% is a good syntax choice? Does anyone have 
an objection to it? It wouldn’t conflict with anything, it uses punctuation, 
and it makes sense.

--
Andrea Faulds
http://ajf.me/





--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to