Basic Types
Numeric types
The following table gives an overview of the supported numeric types and their ranges:
|
kind
size
|
signed integers | ||
|---|---|---|---|
| type | min | max | |
| 8 bits | i8 |
-128 |
127 |
| 16 bits | i16 |
-32768 |
32768 |
| 32 bits | i32 |
-2147483648 |
-2147483647 |
| 64 bits | i64 |
-9223372036854775808 |
9223372036854775807 |
| 128 bits | i128 |
-170141183460469231731687303715884105728 |
170141183460469231731687303715884105727 |
| dynamic size | int |
-∞ | +∞ |
|
kind
size
|
unsigned integers | ||
| type | min | max | |
| 8 bits | u8 |
0 |
255 |
| 16 bits | u16 |
0 |
65535 |
| 32 bits | u32 |
0 |
4294967295 |
| 64 bits | u64 |
0 |
18446744073709551615 |
| 128 bits | u128 |
0 |
340282366920938463463374607431768211455 |
| dynamic size | uint |
0 |
+∞ |
|
kind
size
|
floats | ||
| type | min | max | |
| 8 bits | ⸺ | ⸺ | ⸺ |
| 16 bits | f16 (unsupported so far) |
9.2E41 |
3.4E38 |
| 32 bits | f32 |
1.4E−45 |
3.4E38 |
| 64 bits | f64 |
4.9E−324 |
1.7976931348623157E308 |
| 128 bits | f128 (unsupported so far) |
3.4E-4932 |
1.1897314953572317650857593266280070162E4932 |
| dynamic size | ⸺ | ⸺ | ⸺ |
Types i128, f16 and f128
are not supported yet.
The default type of integer constants is currently i32, but this
will most likely be changed to i64.
The default type of float constants is f64.
Here is a small example that calculates and prints the ranges of wrap-around integer types:
Boolean type
Boolean values true and false are of
type bool, which is the required type for conditions used
in if statements or in pre- and post-conditions among others.
Note that bool is fully implemented as a choice type of two unit
types TRUE and FALSE.
Character types
There is no character type. It seems risky to define a type for the current 17 planes of Unicode code points. UTF-8 can address 32 planes in 4 bytes. Chances are high that someone will find a use for the additional planes or even extend UTF-8 to support more than 4 bytes per code point. Using i32 for a code point seems sufficiently safe for future Unicode changes.
The following gives a small example that extracts a slice of codepoints and a
slice of bytes from a string to create a new string. Note that some
emoji-symbols like ☯️ consist of several codepoints (U+262F U+FE0F,
meaning yin-yang symbol U+262F in its graphical form
U+FE0F), i.e., these might get modified when single codepoints are
copied. Even worse, when single utf8-bytes are copied, non 7-bit ASCII
characters may get crippled:
nil type
nil is defined as a unit type feature in the standard library.
It is intended to be used to represent the absence of a value. Examples may be a
lists tail that is empty or the result of a lookup that failed.
See Type unit for more information.
void type
void is defined as an absurd feature in the standard library,
i.e. a feature that cannot be instantiated since it requires a void
type argument. It is intended to be used to represent the absence of a result.
void is the result type of an endless loop or intrinsic features
such as exit that never return.
See Type void for more information.