# Supported Platforms

Firstly, some assumptions about the platforms the language targets, just to get a few things out of the way. An implementation will not be able to support all the language features if some of these assumptions are not met.

*Note that these do not imply hardware support, merely compiler support; the difference is most relevant for floating-point and 64-bit integer types.*

`<stdint.h>`

is available or can be implemented, with`[u]int{8,16,32,64}_t`

and`[u]intptr_t`

types present. This also implies the following:- Bytes are 8 bits in size. The smallest addressable unit is a
`unsigned char == uint8_t`

(`CHAR_BIT == 8`

). (implied by`[u]int8_t`

existing)*(Required for array bitcasts and efficient storage of strings.)* - Signed integers are represented via two’s complement representation. (implied by
`int{8,16,32,64}_t`

— these only exist if they are two’s complement)*(Required for integer semantics.)* - 64-bit integers are available.
*(Required for some integer types.)* - Pointers can be represented as integers, and vice-versa.
*(Required for internal VM logic.)*

- Bytes are 8 bits in size. The smallest addressable unit is a
- Both 32-bit and 64-bit IEEE floating-point types are supported.
*(Required for some features & guarantees of*`float`

and`double`

types.) - The byte order is either big-endian or little-endian. Mixed endianness (“middle-endian”) systems are not supported. Note that this only rules out ancient systems such as the PDP-11.
*(Required for array bitcasts, internal VM logic, and possibly I/O.)*

The target implementation language is a subset of C99.