### Сужение типов
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
Можно брать размер переменной, если это возможно.
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 защищает переменную от обладания такого же
значения переменной в другом месте кода и другой переменной.
Это упрощает реализацию умных указателей.