The main primitive data types in Whiley are:
- Booleans are denoted by the type
bool. This is the simplest of the primitive data types, and has only two possible values:
- Integers are denoted by the type
int. Integers in Whiley are unbounded. This means that, in theory at least, a variable of type
intcan take on any possible integer value; this differs from languages like Java, which imposed range limits based on the underlying number presentation (typically 32-bit two’s complement).
- Reals are denoted by the type
real. Reals in Whiley are unbounded rationals. This means that, in theory at least, a variable of type
realcan take on any possible rational value; again, this offers significantly better precision than, for example,
doublenumbers in Java (which uses IEEE 754).
The following simple Whiley program illustrates these data types in action:
void ::main(System.Console console): i = 123456789101112131415161718 r = 1234567.192849103954720300939 console.out.println(str(i)) console.out.println(str(r))
This program behaves as expected: by printing out the numbers exactly as shown. Observe that neither of these numbers can be stored in a Java variable of type
double without losing precision.
Finally, since we have unbound rationals, it is always valid to assign a variable of type
int to one of type
real and, furthermore, Whiley guarantees there will be no loss of precision. Again, this differs from Java where such assignments may result in a loss of precision (e.g. assigning Java