Constants
Integer constants should not be restricted to decimals, but include other convenient radixes
Other languages
Decimals
Just a plain sequence of digits: 123456789. Do we need support for grouping of thousands or tenthousends as in
million := 1_000_000 ichi_oku := 1_0000_0000or
million := 1,000,000 ichi_oku := 1,0000,0000
? Commas are confusing since some languages use decimal commas instead of decimal points. See also: Stop Putting Commas in Your Numbers.
Space are used to separate expressions, but Unicode's 'NARROW NO-BREAK SPACE (U+202F)' or 'THIN SPACE (U+2009)' might be an alternative, but a dangerous one resulting in different semantics depending on different kinds of white space. Not a good idea.
Binary Constants
Only few languages support binaries, and if they do it usually is by adding a prefix '0b':
letter := [ 0b00110000, 0b01111000, 0b11001100, 0b11001100, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b00000000,] letters := [ 0b00110000111110000011110011111000, 0b01111000110011000110000011001100, 0b11001100110011001100000011000110, 0b11001100111110001100000011000110, 0b11111100110001101100000011000110, 0b11001100110001101100000011000110, 0b11001100110011000110000011001100, 0b11001100111110000011110011111000, 0b00000000000000000000000000000000,]
it might help to have separators
letters := [ 0b_00110000_11111000_00111100_11111000, 0b_01111000_11001100_01100000_11001100, 0b_11001100_11001100_11000000_11000110, 0b_11001100_11111000_11000000_11000110, 0b_11111100_11000110_11000000_11000110, 0b_11001100_11000110_11000000_11000110, 0b_11001100_11001100_01100000_11001100, 0b_11001100_11111000_00111100_11111000, 0b_00000000_00000000_00000000_00000000,]
Octal Constants
Octals are typically prefixed with 0
resulting in easy confusion with decimals:
a := 1234; // = 1234 b := 0234; // = 156 c := 0034; // = 28 d := 0004; // = 4 e := 1000; // = 1000
This is awful!
Rust uses the prefix 0o
for octals, so the equivalent code would be
a := 1234; // = 1234 b := 0o234; // = 156 c := 0o034; // = 28 d := 0o004; // = 4 e := 1000; // = 1000
This seems much clearer.
Hexadecimal Constants
A prefix 0x
or OX
is common for these. Java allows negative hex numbers like 0xffffFFFF
without adding a -
.
Fuzion
Fuzion should allow prefixes 0b
, 0o
, 0d
, 0x
for binary, octal,
decimal and hexadecimal integer literals, no prefix means the literal is a decimal
The literal may contain _
separators. If present, the separators must
divide the number into groups of equal sizes larger than 1, only the first group
is allowed to be smaller or empty if preceded by a prefix.