2 1 Базовая иерархия типов

Иерархия типов

В язык встроена иерархия типов. В отличие от других языков, где проводится разница между шаблонами и реальными типами, почти все типы в языке - шаблонные и реальные подставляются при компиляции. Это очень удобно при написании шаблонного кода, грубо говоря весь код - шаблонный. Это компромисс между простотой написания на динамическом языке и скоростью и компилируемостью статического.

Простейшие типы

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' для хранения размеров.