### Низ лежащий тип
Все абстрактные типы во время выполнения конкретизируются
определённым значением.
Наример int может стать i32, u64 и т.д.
При этом возможно наличие преобразований типов
между собой под капотом.
Если переменная A относится к надмножеству переменной B приведение A к B будет приводится автоматически. В обратную сторону приведение может не всегда работать и его надо указывать явно.
let mut A : int;
let mut B : i32 = 10;
A = B; // тип A i32
let mut A : int;
let mut B : i32 = 10;
B = A; // Корректность этого будет проверена
Вполне возможно компилятор выдаст ошибку, если решит что под капотом происходит сужающее приведение.
Если мы имеем 2 переменные на одинаковом уровне абстракции
например i32 и f32 то для присвоение одной переменной другой
обязательно делать это явно если возможна потеря точности.
Приведение дробного к целому всегда сопровождается типом приведения
floor, ceil, round, trim
let a : i8 = 5;
let b : i16 = a; // ok - расширение диапазона
let a : i16 = 10;
let b : i8 = a; // тоже ok - число в своих пределах и оно известно
let a : i16 = func();
let b : i8 = a // warning - сужение типа
let a : i16 = 10;
let b : i8 = a.byte[0]; // ok - взятие части байт
let c : i8 = a.byte.any;
В языке можно брать тип от переменных.
let a : int = 10;
let aType : type = type(a);
let b : aType = 20;
println!("{} {}", a, b);
// 10 20
type::common() или type() вернёт тот тип, который прописан.
type::concrete() вернёт тип который выведен (может быть
выведен 2ды по-разному в зависимости от вызова функции)
Можно брать размер переменной, если это возможно.
let a : int64;
let sz = sizeof(a);
println!(sz); // 4
Можно также брать размер переменной в битах (только для int).
let a : int64;
let sz = sizeof::bit(a);
println!(sz); // 64
Размер в элементах.
Можно задать граничное значение типа для проверки.
let a : int {@ >= 0 and @ < 100};
a = 50;
a = 90;
a = 0;
a = 120; // Ошибка
a = -100; // Ошибка
Ключевое слово unique защищает переменную от обладания такого же
значения переменной в другом месте кода и другой переменной.
Это упрощает реализацию умных указателей.