rfc:scalar_type_hints

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:scalar_type_hints [2015/02/07 03:03] sebastianrfc:scalar_type_hints [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== PHP RFC: Scalar Type Hints ====== ====== PHP RFC: Scalar Type Hints ======
-  * Version: 0.3 +  * Version: 0.3.1 
-  * Date: 2014-12-14 (initial draft; put Under Discussion 2014-12-31; version 0.2 created 2015-01-13)+  * Date: 2014-12-14 (initial draft; put Under Discussion 2014-12-31; version 0.2 created 2015-01-13; withdrawn 2015-02-15)
   * Author: Andrea Faulds, ajf@ajf.me   * Author: Andrea Faulds, ajf@ajf.me
-  * Status: Voting+  * Status: Withdrawn
   * First Published at: http://wiki.php.net/rfc/scalar_type_hints   * First Published at: http://wiki.php.net/rfc/scalar_type_hints
  
Line 399: Line 399:
 This doesn't affect the behaviour of cast operators. This doesn't affect the behaviour of cast operators.
  
-When the strict type-checking mode isn't in use (which is the default), function calls behave identically to previous PHP versions.+When the strict type-checking mode isn't in use (which is the default), function calls to built-in and extension PHP functions behave identically to previous PHP versions.
  
 ===== Open Issues ===== ===== Open Issues =====
Line 415: Line 415:
  
 Because scalar type hints guarantee that a passed argument will be of a certain type within a function body (at least initially), this could be used in the Zend Engine for optimisations. For example, if a function takes two ''float''-hinted arguments and does arithmetic with them, there is no need for the arithmetic operators to check the types of their operands. As I understand it, HHVM already does such optimisations, and might benefit from this RFC. Because scalar type hints guarantee that a passed argument will be of a certain type within a function body (at least initially), this could be used in the Zend Engine for optimisations. For example, if a function takes two ''float''-hinted arguments and does arithmetic with them, there is no need for the arithmetic operators to check the types of their operands. As I understand it, HHVM already does such optimisations, and might benefit from this RFC.
 +
 +In discussions around this RFC, the ''declare(strict_types=1);'' syntax has been controversial. It is arguably rather ugly, and it has all the scoping quirks of ''declare()''. I've now arrived at a point where I'm willing to change to a truly per-file syntax, ''<?php strict'' (or similar). However, the RFC is currently being voted on, and I'd rather not cancel the vote. So, this will be proposed in a subsequent RFC.
 +
 +Another issue that came up is PHP's lack of a typehint for numbers (which also came up with the previous Scalar Type Hinting with Cast RFC). I plan to propose a ''numeric'' typehint in a future RFC which would take either an integer or a float.
  
 ===== Vote ===== ===== Vote =====
  
-As this is a language change, this RFC requires a 2/3 majority to pass. Voting for all three votes started on 2015-02-05 and all end on 2015-02-19. +As this is a language change, this RFC requires a 2/3 majority to pass. Voting for all three votes started on 2015-02-05 and all were to end on 2015-02-19, but the voting was cancelled and the RFC withdrawn on 2015-02-15.
  
 ==== Main ==== ==== Main ====
Line 424: Line 428:
 This vote is for the RFC itself. This vote is for the RFC itself.
  
-<doodle title="Accept the Scalar Type Hints RFC and merge patch into master?" auth="ajf" voteType="single" closed="false">+<doodle title="Accept the Scalar Type Hints RFC and merge patch into master?" auth="ajf" voteType="single" closed="true">
    * Yes    * Yes
    * No    * No
Line 433: Line 437:
 This second vote is to solve the open issue regarding the ''integer'' and ''boolean'' synonyms for ''int'' and ''bool''. Whichever option receives the most votes will be implemented. This second vote is to solve the open issue regarding the ''integer'' and ''boolean'' synonyms for ''int'' and ''bool''. Whichever option receives the most votes will be implemented.
  
-<doodle title="Type aliases" auth="ajf" voteType="single" closed="false">+<doodle title="Type aliases" auth="ajf" voteType="single" closed="true">
    * Allow synonyms    * Allow synonyms
    * Reserve synonyms and produce error message when used    * Reserve synonyms and produce error message when used
Line 443: Line 447:
 This final vote is in case the RFC fails to pass. It's a 2/3 majority-required backwards compatibility-breaking language change, which is to reserve the type hint names proposed by the RFC, so that a future RFC could implement scalar type hints without requiring a backwards compatibility break. The type names reserved include the synonyms ''integer'' and ''boolean''. They would not be reserved words, merely prohibited from use as class/interface/trait names, like this RFC's type names. This final vote is in case the RFC fails to pass. It's a 2/3 majority-required backwards compatibility-breaking language change, which is to reserve the type hint names proposed by the RFC, so that a future RFC could implement scalar type hints without requiring a backwards compatibility break. The type names reserved include the synonyms ''integer'' and ''boolean''. They would not be reserved words, merely prohibited from use as class/interface/trait names, like this RFC's type names.
  
-<doodle title="Reserve type names if RFC does not pass?" auth="ajf" voteType="single" closed="false">+<doodle title="Reserve type names if RFC does not pass?" auth="ajf" voteType="single" closed="true">
    * Yes    * Yes
    * No    * No
Line 466: Line 470:
 ===== Changelog ===== ===== Changelog =====
  
 +  * v0.3.1 - Noted ''numeric'' and syntax change in Future Scope
   * v0.3 - Return types support   * v0.3 - Return types support
   * v0.2.3 - ''strict_types=1'' rather than ''strict_typehints=TRUE''   * v0.2.3 - ''strict_types=1'' rather than ''strict_typehints=TRUE''
rfc/scalar_type_hints.1423278210.txt.gz · Last modified: 2017/09/22 13:28 (external edit)