rfc:pow-operator

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
rfc:pow-operator [2013/12/19 08:09]
datibbaw
rfc:pow-operator [2014/08/11 18:24]
nikic
Line 1: Line 1:
  
 ====== PHP RFC: Power Operator ====== ====== PHP RFC: Power Operator ======
-  * Version: 0.2+  * Version: 0.3
   * Date: 2013-11-23   * Date: 2013-11-23
   * Author: Tjerk Meesters, datibbaw@php.net   * Author: Tjerk Meesters, datibbaw@php.net
-  * Status: Voting+  * Status: Implemented in PHP 5.6
   * First Published at: http://wiki.php.net/rfc/pow-operator   * First Published at: http://wiki.php.net/rfc/pow-operator
   * Revision (0.1 → 0.2): 2013-12-19   * Revision (0.1 → 0.2): 2013-12-19
 +  * Revision (0.2 → 0.3): 2013-12-21
  
 ===== Introduction ===== ===== Introduction =====
  
-This proposal is three-fold:+This proposal is two-fold:
  
-  - Turn the existing [[http://php.net/pow|pow()]] function into a language construct.+  - Introduce an exponential (right associativeoperator ''<nowiki>**</nowiki>''.
     * Avoids a function call.     * Avoids a function call.
     * Support for [[rfc:operator_overloading_gmp|GMP overloading]].     * Support for [[rfc:operator_overloading_gmp|GMP overloading]].
-  - Introduce an exponential (right associative) operator ''<nowiki>**</nowiki>''. 
     * Easier to read and shorter to write.     * Easier to read and shorter to write.
     * Can be found in other languages.     * Can be found in other languages.
Line 21: Line 21:
  
 ===== Proposal ===== ===== Proposal =====
- 
-**pow() as language construct** 
- 
-No changes to existing code, safe for one: 
- 
-<code php> 
-var_dump(pow([], 2)); // int(0) instead of float(0) 
-</code> 
- 
-**Power operator** 
  
 A short working example: A short working example:
Line 76: Line 66:
 echo ~3 ** 2; // -10 (not 16) echo ~3 ** 2; // -10 (not 16)
 </code> </code>
 +
 +===== Changelog =====
 +
 +21-Dec-2013: 
 +  * Removed turning pow() into a language construct from the proposal, due to BC breaks.
 +  * Closed vote and moved RFC back to Discussion status.
 +  * Reverted commit [[https://github.com/datibbaw/php-src/commit/f60b98cf7a8371233d800a6faa286ddba4432d02|f60b98c]].
 +
 +22-Dec-2013:
 +  * Moved RFC back to Voting status
  
 ===== Discussion ===== ===== Discussion =====
  
-> Should ''-<nowiki>**</nowiki> 3'' evaluate to ''9'' instead of ''-9''?+> Should ''-<nowiki>**</nowiki> 2'' evaluate to ''9'' instead of ''-9''?
  
 According to the following resources, the scale tips more towards having the exponent precede the unary minus: According to the following resources, the scale tips more towards having the exponent precede the unary minus:
Line 86: Line 86:
   * http://math.stackexchange.com/questions/491933/exponent-rules-with-negative-numbers   * http://math.stackexchange.com/questions/491933/exponent-rules-with-negative-numbers
   * http://math.stackexchange.com/questions/68833/what-does-22-evaluate-to/68834#68834   * http://math.stackexchange.com/questions/68833/what-does-22-evaluate-to/68834#68834
 +
 +**Similar languages**
 +
 +  * Ada
 +  * D
 +  * F#
 +  * Fortran
 +  * Freemat
 +  * Haskell
 +  * Mathematica / Matlab / Scilab
 +  * Octave
 +  * Perl
 +  * Python
 +  * R
 +  * Ruby
 +  * Sage
 +  * VB / Basic
 +
 +**Dissimilar languages**
 +
 +  * Bash
 +  * Cobol
 +  * ColdFusion
 +  * Excel
 +  * Tcl
  
 ---- ----
Line 99: Line 124:
   * Octave   * Octave
   * Matlab   * Matlab
-  * D 
   * ColdFusion   * ColdFusion
  
 ** Languages with right associative exponential operator** ** Languages with right associative exponential operator**
  
 +  * D
   * Haskell   * Haskell
   * R   * R
Line 139: Line 164:
  
 External extensions such as [[http://pecl.php.net/package/vld|vld]] or [[https://github.com/krakjoe/phpdbg|phpdbg]] would have to be updated, but I'm not aware of any core extensions that would otherwise be affected. External extensions such as [[http://pecl.php.net/package/vld|vld]] or [[https://github.com/krakjoe/phpdbg|phpdbg]] would have to be updated, but I'm not aware of any core extensions that would otherwise be affected.
- 
-===== Open Issues ===== 
- 
-None. 
  
 ===== Vote ===== ===== Vote =====
Line 148: Line 169:
 Voting will be based on the following: Voting will be based on the following:
  
-  * Turn ''pow()'' into a language construct, 
   * Add the power operators ''<nowiki>**</nowiki>'' and ''<nowiki>**</nowiki>='',   * Add the power operators ''<nowiki>**</nowiki>'' and ''<nowiki>**</nowiki>='',
   * Add ''ZEND_POW'' and ''ZEND_ASSIGN_POW'' opcodes.   * Add ''ZEND_POW'' and ''ZEND_ASSIGN_POW'' opcodes.
Line 159: Line 179:
  
 ---- ----
 +
 +<doodle title="Should PHP get a power operator in 5.6?" auth="datibbaw" voteType="single" closed="true">
 +   * Yes, right associative
 +   * Yes, non associative
 +   * No
 +</doodle>
  
 ---- ----
  
 Voting ends on 5th of January 2014. Voting ends on 5th of January 2014.
 +
  
  
Line 169: Line 196:
 Power operator PR: https://github.com/php/php-src/pull/543 Power operator PR: https://github.com/php/php-src/pull/543
  
 +PHP 5.6 Commits: [[http://git.php.net/?p=php-src.git;a=commit;h=aff56f3c4539869910cf2778cf0ece2d8c2dd671|1]] [[http://git.php.net/?p=php-src.git;a=commit;h=363ff60475d93716722034b8f7a2486229bf4cfb|2]]
rfc/pow-operator.txt · Last modified: 2017/09/22 13:28 (external edit)