Типы

Ü есть статически-типизированный язык, что означает, что каждая переменная должна иметь известный на этапе компиляции тип.

В Ü есть несколько классов типов:

Фундаментальные

Фундаментальные типы являются основой системы типов, все остальные типы строятся с их использованием. В Ü существуют следующие фундаментальные типы:

  • void - предназначен для возвращаемого значения функций, которым ничего не надо возвращать. Имеет нулевой размер.
  • bool - логический тип, принимает значения true и false.
  • Целочисленные знаковые типы - i8, i16, i32, i64, i128.
  • Целочисленные беззнаковые типы - u8, u16, u32, u64, u128.
  • Вещественные типы - f32, f64.
  • Символьные типы - char8, char16, char32.
  • Типы для представления сырых данных - byte8, byte16, byte32, byte64, byte128.

Числовой суффикс в названиях ряда типов означает их размер, в битах.

Массивы

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

Примеры объявления типов массивов:

[ i32, 4 ] // Массив из четырёх элементов типа "i32"
[ char8, 8 ] // Массив из восьми элементов типа "char8"
[ [ f32, 4 ] , 4 ] // Двумерный массив с элементом типа "f32"
[ bool, 0 ] // Пустой массив

Доступ к элементам массива осуществляется через оператор []. Внутри [] должно быть выражение целочисленного беззнакового типа с индексом.

var [ i32, 4 ] mut arr= zero_init;
var u32 i= 1;
arr[0]= 66;
arr[i]= 55;
arr[2]= arr[0] + arr[3];

Кортежи

Кортежи представляют собой упорядоченное множество значений, каждое из которых может иметь свой тип.

Примеры объявлений типов кортежей:

tup[ i32, f32 ] // Кортеж из двух элементов различных типов
tup[] // Пустой кортеж
tup[ i32, i32, i32 ] // Кортеж из элемнтов одного типа
tup[ i32, f32, f32, bool, [ i32, 2 ], char8, [ char16, 8 ], tup[ bool, f64 ], u64 ] // В кортеже могут быть массивы и другие кортежи

Доступ к элементам кортежа осуществляется через оператор []. Внутри [] должно быть выражение - константа времени компиляции целочисленного типа с индексом.

var tup[ i32, f32, bool ] mut t= zero_init;
t[0]= 55;
t[1]= 3.7f;
t[2]= f32(t[0]) == t[1];

Элементы кортежей можно перебирать через конструкцию for.

Структуры и классы

Структуры и классы представляют собой набор именованных значений различных типов плюс ассоциированные функции, типы, переменные. См. Структуры и Классы.

Перечисления

См. Перечисления.

Указатели на функцию

См. Указатели на функцию.

Сырые указатели

См. Сырые указатели.