### Объявление
Переменные объявляются выражением let.
let /*модификатор константности*/ x;
Свойство изменяемости можно указывать явно.
let mut x; // подлежит изменению
let const y = 10; // не подлежит изменению
let z; // компилятор сам разберётся как рабоать с переменной
let const::auto k; // то же самое но явно
Есть специальные квалификаторы изменяемости.
let const::ct x = 10;
const::ct значит что неизменяемость не может быть изменена
в будущем через каст типа (а значит компилятор оптимизирует её).
let const::rt y = 10;
const::rt значит что неизменяемость может являться условной.
А значит вполне возможно будет можно убрать этот квалификатор.
Компилятор не будет оптимизировать.
let const::full z = 10;
const::full значит, что неизменяемость будет comiple time. Неизменяемость будет принимать только значение литерала.
Выведение значения из функции не допускается.
Компилятор будет агрессивно оптимизировать эту переменную,
в плоть до того, что вставлять её значение в точках вызова функции.
Можно применять к параметрам функции, только если есть дефолтное значение
которое никогда не меняется.
let const::expr s = 10;
const::expr значит, что переменную можно вывести через вызов функции
или выражения в compile time.
let mut x = 10;
mut значит это обычная переменная, которая подлежит изменению.
let mut::atomic::write y = 10;
mut::atomic Значит что для записи будет использованы атомарные операции.
let mut::atomic::full y = 10;
mut::atomic::full Значит что для чтения и записи будут использованы атомарные операции.
Переменные имеют свой тип. Изначально тип является шаблонным и компилятор выводит тип наиболее подходящий в конкретной ситуации.
Значения переменных могут быть заданы по-разному. Тип значения автоматически выводится из типа переменной. Все литералы по умолчанию находятся в суперпозиции, где нет конкретного типа, тип подберётся автоматически в соответствиями с требованиями переменной на основании лучшего результата.
Тип значения целых чисел числится как bignum и может
содержать большое число, больше чем можно
представить в виде реального значения.
Постфиксы идут после числа или строки и определяют тип значения. Например:
let mut k = 10i;
Данный код определяет переменную k и инициализирует её
целочисленным значением 10.
Постфиксы по знаку (целочисленные)
| Постфикс | Пример | Тип |
|---|---|---|
| i | 10i | int |
| ui | 10ui | unsigned int |
| si | -10si | signed int |
| Постфиксы по размеру (целочисленные) |
| Постфикс | Пример | Размер |
|---|---|---|
| i8 | 10i8 | byte |
| i16 | 665i16 | word |
| i32 | 10_000i32 | dword |
| i64 | 1000_000_000i64 | qword |
Числа можно разделять знаками подчёркивания для удобства чтения. Пример:
let const x = 10_000_000;
let const hex = 0x00_6a_91_ff;
Язык поддерживает запись значений через числитель/знаменатель. Такая запись приведётся к ближайшему дробному числу.
var : real a = (1/2)real;
Для проверки существования используется оператор exist() в
статичном выражении #if. 3 1 if
Мы можем во время компиляции проверить существование переменной.
let a; // работает как флаг
#if(exist(a)) // if помечен # как constexpr
{
let a : str = "hello";
}
else
{
let a : float = 0.3;
}
println!(a);
// Напечатает hello