Псевдонимы типов

В Ü имеется возможность задать новое имя для существующего типа. Для этого надо объявить его с использованием ключевого слова type, имени псевдонима и описания исходного типа после =. Объявление псевдонима помещается в пространство, в котором оно объявлено. Имя псевдонима можно использовать везде, где нужно имя типа.

type MyInt = i32;

fn Bar( MyInt x );

fn Foo()
{
   var MyInt x= 0;
   Bar(x);
}

Объявление псевдонима типа не создаёт новый тип, а лишь создаёт имя для обращения к существующему типу. Из этого следует, что тип сам по себе и его псевдонимы взаимозаменяемы. Также взаимозаменяемы различные псевдонимы для одного и того же типа.

type MyInt = i32;
type I32 = i32;

fn Bar( i32 x );

fn Foo()
{
    var MyInt x= 0;
    var I32 y= 0;
    var MyInt y_copy= y; // Используем значение, объявленное с использованием псевдонима "I32", для инициализации переменной, объявленной с использованием псевдонима "MyInt".
    var I32 x_copy= x; // Аналогично, но в другую сторону.
    Bar(x); // "MyInt" есть "i32", а значит так можно.
    Bar(y); // "I32" есть "i32", а значит так можно.
}

Псевдонимы можно задавать для любых типов:

type IntVec3 = [ i32, 3 ]; // Псевдоним для массива
type FloatPair = tup[ f32, f32 ]; // Псевдоним для кортежа

struct S{}
type SAlias = S; // Псевдоним для структуры

type AnotherVec = IntVec3; // Псевдоним для псевдонима массива

fn Foo()
{
    var IntVec3 v[ 0, 1, 2 ];
    var FloatPair p[ 0.25f, 0.33f ];
    var SAlias s{};
    var AnotherVec v2[ 55, 625, 111 ];
}