rfc:numeric_literal_separator
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:numeric_literal_separator [2019/05/23 05:28] – Add example of separating bytes in a binary/hex literal theodorejb | rfc:numeric_literal_separator [2019/08/19 19:58] (current) – Separators in C# aren't just a proposal theodorejb | ||
---|---|---|---|
Line 3: | Line 3: | ||
* Author: Theodore Brown < | * Author: Theodore Brown < | ||
* Based on [[https:// | * Based on [[https:// | ||
- | * Status: | + | * Status: |
+ | * Discussion: https:// | ||
* Target version: PHP 7.4 | * Target version: PHP 7.4 | ||
* Implementation: | * Implementation: | ||
Line 44: | Line 45: | ||
299_792_458; | 299_792_458; | ||
0xCAFE_F00D; | 0xCAFE_F00D; | ||
- | 0b0010_1101; // binary | + | 0b0101_1111; // binary |
- | 026_73_43; | + | 0137_041; // octal |
</ | </ | ||
Line 68: | Line 69: | ||
===== Unaffected PHP Functionality ===== | ===== Unaffected PHP Functionality ===== | ||
- | Underscores | + | Adding an underscore between digits |
- | lexing stage, so the runtime | + | change its value. The underscores are stripped out during the lexing |
+ | stage, so the runtime | ||
<code php> | <code php> | ||
Line 167: | Line 169: | ||
literal, which allows searching for a value like " | literal, which allows searching for a value like " | ||
the numbers containing that specific byte. | the numbers containing that specific byte. | ||
+ | |||
+ | ==== Should it be the role of an IDE to group digits? ==== | ||
+ | |||
+ | It has been suggested that numeric literal separators aren't needed | ||
+ | for better readability, | ||
+ | display large numbers in groups of three digits. | ||
+ | |||
+ | However, it isn't always desirable to group numbers the same way. | ||
+ | For example, a programmer may write '' | ||
+ | depending on whether or not it represents a financial quantity stored | ||
+ | as cents: | ||
+ | |||
+ | <code php> | ||
+ | $total = 100_500_00; // represents $100,500.00 stored as cents | ||
+ | |||
+ | $total = 10_050_000; // represents $10,050,000 | ||
+ | </ | ||
+ | |||
+ | Binary and hex literals may also be grouped by a varying number of | ||
+ | digits to reflect how they are used (e.g. bits may be separated into | ||
+ | nibbles, bytes, or words). An IDE cannot do this automatically | ||
+ | without knowing the programmer' | ||
==== Why resurrect this proposal? ==== | ==== Why resurrect this proposal? ==== | ||
Line 188: | Line 212: | ||
Andrea Faulds summarized the considerations [[https:// | Andrea Faulds summarized the considerations [[https:// | ||
- | > This feature offers some benefit in some cases. It doesn' | + | < |
- | > much new complexity. There' | + | This feature offers some benefit in some cases. It doesn' |
- | > the form of the existing number tokens. It fits in well [with] what' | + | much new complexity. There' |
- | > already there, consistently applying to all number literals. It follows | + | the form of the existing number tokens. It fits in well [with] what' |
- | > established convention in other languages. Its appearance at least hints | + | already there, consistently applying to all number literals. It follows |
- | > that values with these separators are not constants or identifiers, | + | established convention in other languages. Its appearance at least hints |
- | > numbers, reducing potential for confusion. It limits its own application | + | that values with these separators are not constants or identifiers, |
- | > to prevent abuse (no leading, trailing, or repeated separators). And | + | numbers, reducing potential for confusion. It limits its own application |
- | > it's relatively intuitive. | + | to prevent abuse (no leading, trailing, or repeated separators). And |
+ | it's relatively intuitive. | ||
+ | </ | ||
==== Comparison to other languages ==== | ==== Comparison to other languages ==== | ||
Line 203: | Line 229: | ||
* Ada: single, between digits [[http:// | * Ada: single, between digits [[http:// | ||
- | * C# (proposal for 7.0): multiple, between digits [[https:// | + | * C#: multiple, between digits [[https:// |
* C++: single, between digits (single quote used as separator) [[http:// | * C++: single, between digits (single quote used as separator) [[http:// | ||
* Java: multiple, between digits [[https:// | * Java: multiple, between digits [[https:// | ||
Line 217: | Line 243: | ||
===== Vote ===== | ===== Vote ===== | ||
- | Add numeric literal | + | Voting started 2019-05-30 and ended 2019-06-13. |
+ | |||
+ | <doodle title=" | ||
+ | | ||
+ | | ||
+ | </ | ||
===== References ===== | ===== References ===== | ||
Line 225: | Line 256: | ||
Discussion from previous RFC: https:// | Discussion from previous RFC: https:// | ||
- | Blog post about implementation: | + | Blog post about original |
rfc/numeric_literal_separator.1558589286.txt.gz · Last modified: 2019/05/23 05:28 by theodorejb