rfc:operator_overloading_gmp

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
rfc:operator_overloading_gmp [2013/05/17 19:04] – expand gmp proposal nikicrfc:operator_overloading_gmp [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 4: Line 4:
   * Date: 2013-05-12   * Date: 2013-05-12
   * Author: Nikita Popov <nikic@php.net>   * Author: Nikita Popov <nikic@php.net>
-  * Status: Draft+  * Status: Implemented in PHP 5.6
   * Patch: https://github.com/php/php-src/pull/342   * Patch: https://github.com/php/php-src/pull/342
-  * Target version: PHP 5.6 (or whatever the next one is) 
  
 ===== Introduction ===== ===== Introduction =====
Line 13: Line 12:
  
 ===== Proposal A: Operator overloading ===== ===== Proposal A: Operator overloading =====
 +
 +Note: This proposal is only about **internal** operator overloading and **not** about userland overloading.
  
 ==== Why operator overloading? ==== ==== Why operator overloading? ====
Line 81: Line 82:
   * Unsigned arithmetic and arithmetic on other integral types PHP does not support (e.g. cross platform 64bit integers)   * Unsigned arithmetic and arithmetic on other integral types PHP does not support (e.g. cross platform 64bit integers)
   * Vector and matrix calculations   * Vector and matrix calculations
-  * (Misuse for DSLs)+ 
 +Due to potential pitfalls of misusing operator overloading known from other languages (most notably C++), the use of this new feature should be limited to cases where there are clear definitions to the behavior of all overloaded operators. The application of this feature should be for mathematical use cases only (as noted above), and not 'creative' applications such as changing the white balance of a picture by incrementing or decrementing the picture object.
  
 ==== Technical proposal ==== ==== Technical proposal ====
Line 195: Line 197:
  
 object(GMP)#1 (1) { object(GMP)#1 (1) {
-["num"]=> +  ["num"]=> 
-string(1) "2"+  string(1) "2"
 } }
 object(GMP)#2 (1) { object(GMP)#2 (1) {
-["num"]=> +  ["num"]=> 
-string(1) "3"+  string(1) "3"
 } }
 </code> </code>
Line 222: Line 224:
 </code> </code>
  
-The following operators are supported: ''+'', ''-'', ''*'', ''/'', ''%'', ''|'', ''&'', ''^'' and ''~''. The operators ''%%<<%%''''%%>>%%'' are not yet supported, but support is planned. All operators work with two GMP values or one GMP value and one GMP-coercible value (e.g. strings and integers).+The following operators are supported: ''+'', ''-'', ''*'', ''/'', ''%'', ''|'', ''&'', ''^''''~''''%%<<%%'' and ''%%>>%%''. All operators work with two GMP values or one GMP value and one GMP-coercible value (e.g. strings and integers).
  
 === Overloaded operators: Comparison === === Overloaded operators: Comparison ===
Line 282: Line 284:
 <code> <code>
                      NEW    OLD                      NEW    OLD
-a) gmp_add($a, $b)   1.16   1.25 +a) gmp_add($a, $b)   1.07   1.25 
-b) gmp_add($a, 17)   1.08   1.21 +b) gmp_add($a, 17)   1.02   1.21 
-c) gmp_add(42, $b)   1.29   1.84 +c) gmp_add(42, $b)   1.20   1.84 
-d) $a + $b           0.83   ---+d) $a + $b           0.76   ---
 </code> </code>
  
Line 293: Line 295:
  
 The pull request for this RFC can be found here: https://github.com/php/php-src/pull/342 The pull request for this RFC can be found here: https://github.com/php/php-src/pull/342
 +
 +===== Vote =====
 +
 +The vote started on 10.06.2013 and ended on 17.06.2013. Both proposals are accepted.
 +
 +<doodle title="Should these changes be applied for PHP 5.6?" auth="nikic" voteType="multi" closed="true">
 +   * Internal operator overloading
 +   * GMP changes
 +   * None
 +</doodle>
  
 ===== Previous discussions ===== ===== Previous discussions =====
  
-http://markmail.org/message/y7rq5vcd5ucsbcyb (Note: The patch that is being discussed there is not accessible anymore.)+http://markmail.org/message/y7rq5vcd5ucsbcyb: This is a rather old discussion on userland operator overloading (so not really the same as this). The patch discussed there is no longer accessible.
rfc/operator_overloading_gmp.1368817474.txt.gz · Last modified: 2017/09/22 13:28 (external edit)