Иерархия типов
В язык встроена иерархия типов. В отличие от других языков, где проводится разница между шаблонами и реальными типами, почти все типы в языке - шаблонные и реальные подставляются при компиляции. Это очень удобно при написании шаблонного кода, грубо говоря весь код - шаблонный. Это компромисс между простотой написания на динамическом языке и скоростью и компилируемостью статического.
num - число. Любая переменна поддерживающая базовые арифметические операции, такие как: 1) присваивание 2) приведение к другому числовому типу (если возможно) 3) плюс, минус, умножить, поделить
int - целое число. Число, которое делает всё то же самое но плюс:
1) может быть ключом массива (приводится к size)
2) модуль от деления
По умолчанию со знаком.
real - дробное число. Число, которое делает то же самое, плюс: приблизительное сравнение на равенство (вам не нужно прописывать его вручную). Также можно брать округлённое значение.
float - дробное число с плавающей точкой. Число, которое поддерживается текущей архитектурой.
bool - булево число. Число типа int которое принимает всего 2 значения - 0 и любое больше 0. Плюс неявно приводит любой объект в блоке if к этому значению.
signed, unsigned - примесь. В случае с int - используется ли знак.
Числа signed и unsigned по умолчанию выдают предупреждение
при сравнении или присваивании.
byte, word, dword, qword, tword, dqword, qqword - примесь. Размер переменной.
Размеры:
1) byte - 1 байт (8 бит)
2) word - 2 байта (16 бит)
3) dword - 4 байта (32 бит)
4) qword - 8 байт (64 бит)
5) tword - 10 байт (80 бит) - редкое (для x87 FPU float)
6) dqword - 16 байт (128 бит) - редкое
7) qqword - 32 байта (256 бит) - редкое
Вы можете также указать относительность размеров.
byte * 2 - в 2 раза больше чем байт
qword / 2 - в 2 раза меньше чем кворд
int8, int16,int32, int64, ...- алиасы к int
i8, i16, i32, i64, ... - сокращённые алиасы к int
u_int8, u_int16, u_int32, u_int64, ... - алиасы к unsigned int
u8, u16, u32, u64, ... - сокращённые алиасы к unsigned int
Дополнительно есть тип размера.
@size тип обозначающий размер (платформо зависимый)
u_size - алиас к @size - беззнаковый размер
i_size - алиас к @size - знаковый размер
@size имеет размер 4 байта на 32 битной архитектуре
и 8 байт на 64 битной архитектуре
Вы можете объявлять размер целочисленной переменной.
let x : 123i;
Например:
В языке также есть встроенный тип строк. Строки могут приводиться к массиву символов (лениво), А символы (одиночные) к строкам и наоборот.
Есть тип int::size и `int::size::diff' для хранения
размеров.