rfc:intdiv

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:intdiv [2014/07/15 01:28] – *do ajfrfc:intdiv [2015/04/19 01:08] – Added PHP manual link pasindu
Line 1: Line 1:
 ====== PHP RFC: intdiv() ====== ====== PHP RFC: intdiv() ======
-  * Version: 0.1 +  * Version: 0.2 
-  * Date: 2014-07-15+  * Date: 2014-07-15 (Last updated 2014-07-16)
   * Author: Andrea Faulds, ajf@ajf.me   * Author: Andrea Faulds, ajf@ajf.me
-  * Status: Under Discussion+  * Status: Accepted (Fallback proposal; operator rejected), merged into master
   * First Published at: http://wiki.php.net/rfc/intdiv   * First Published at: http://wiki.php.net/rfc/intdiv
  
Line 13: Line 13:
 ===== Proposal ===== ===== Proposal =====
  
-A new function is added to ext/standard's math functions:+new infix operator is added: 
 + 
 +<code php> 
 +var_dump(3 %% 2); // int(1) 
 +</code> 
 + 
 +It returns the integer division of the first operand by the second. If the divisor (the second operand) is zero, it throws an E_WARNING and returns FALSE, just as the division operator does. If the first operator is ''LONG_MIN'' (''-PHP_INT_MAX - 1'') and the second is ''-1'', it returns zero, much like the ''%'' operator. 
 + 
 +Assignment is also supported: 
 + 
 +<code php> 
 +$foobar = 3; 
 +$foobar %%= 2; 
 +var_dump($foobar); // int(1) 
 +</code> 
 + 
 +==== Fallback proposal ==== 
 + 
 +The original proposal was just to add a function. Should the operator fail to get in, I instead propose a new function is added to ext/standard's math functions:
  
 <code php> <code php>
Line 19: Line 37:
 </code> </code>
  
-It returns the integer division of //$numerator// by //$divisor//. If //$divisor// is zero, it throws an E_WARNING and returns FALSE, just as the division operator does.+It returns the integer division of //$numerator// by //$divisor//. If //$divisor// is zero, it throws an E_WARNING and returns FALSE, just as the division operator does. If the first operator is ''LONG_MIN'' (''-PHP_INT_MAX - 1'') and the second is ''-1'', it returns zero, much like the ''%'' operator.
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
  
-It would conflict with any existing userland functions called intdiv, but that's unlikely.+The ''%''''%'' operator wouldn't conflict with anything. 
 + 
 +The fallback proposal, ''intdiv'', would conflict with any existing userland functions called intdiv, but that's unlikely.
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
Line 31: Line 51:
 ===== Future Scope ===== ===== Future Scope =====
  
-Should we make it shorter, just //div()//? That done, should we make it an internal function with its own opcode, much like //pow()//? In that case, why not make it an infix operator, e.g. ''3 div 2''? Pascal and Game Maker Language do this, as noted in References.+None can see.
  
-===== Proposed Voting Choices =====+===== Vote =====
  
-This is not a language change, so 50%+1 Yes/No to merge into master.+Two votes are being held simultaneously: 
 + 
 +  - Merge the intdiv operator (''%''''%'') patch into master? Yes/No (requires 2/3 majority, language change
 +  - If the ''%''''%'' operator vote fails to achieve a 2/3 majorityshould the intdiv() function patch be merged into master? Yes/No (requires 50%+1 majority, non-language change) 
 + 
 +As the ext/standard function is to be considered a fallback option only, it would not be merged if the proper operator gets in. 
 + 
 +Voting opened 2014-07-30 and ended 2014-08-06. 
 + 
 +<doodle title="Merge the intdiv operator patch into master?" auth="ajf" voteType="single" closed="true"> 
 +   * Yes 
 +   No 
 +</doodle> 
 + 
 +---- 
 + 
 +<doodle title="If the operator vote fails to achieve a 2/3 majority, should the intdiv() function patch be merged into master?" auth="ajf" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
  
-A fully-working patch against master with tests has been made. The pull request is here: https://github.com/php/php-src/pull/722+A fully-working patch against master with tests has been made. The pull request is here: https://github.com/php/php-src/pull/724 
 + 
 +The pull request for the fallback (and original proposal) of just the //ext/standard// function is here: https://github.com/php/php-src/pull/722
  
 ===== Implementation ===== ===== Implementation =====
-After the project is implemented, this section should contain  + 
-  - the version(s) it was merged to +It was merged into master here: https://github.com/php/php-src/commit/8e964fe665b6a4fbdc59639dad2efb4cd43d1c05 
-  a link to the git commit(s) + 
-  - a link to the PHP manual entry for the feature+It will be in PHP 7. Since there is no 5.7 branch, it is doubtful it will actually be in 5.7. 
 + 
 +PHP Manual - http://php.net/manual/en/function.intdiv.php
  
 ===== References ===== ===== References =====
  
-Somewhat inspired by Python's ''/''''/'' operator, and the equivalent //div// operator in Pascal and Game Maker Language (a somewhat obscure C-like partially object-oriented scripting language, which probably inherited this from Pascal).+Somewhat inspired by Python's ''/''''/'' operator, and the equivalent //div// operator in Pascal and Game Maker Language (a somewhat obscure C-like partially object-oriented scripting language, which probably inherited this from Pascal). The choice of the ''%''''%'' syntax is thanks to Bishop Bettini's suggestion on internals.
  
 ===== Rejected Features ===== ===== Rejected Features =====
  
 None yet. None yet.
 +
 +===== Changelog =====
 +
 +  * 0.2 - Propose ''%''''%'' operator instead
 +  * 0.1 - Created, intdiv() function
rfc/intdiv.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1