Leo: Типы данных и значения
Приветствую в новой статье посвященной языку программирования Leo для платформы приватности Aleo.
В этой статье мы затронем детально информацию о типах данных, это очень важно, так как все апки завязаны конкретно на этом. В принципе без этого представить любое приложение на любом языке программирования невозможно. Приступ с предыстории.
Leo — язык со статической типизацией, а это значит, что мы должны знать тип каждой переменной перед выполнением схемы.
Как это выглядит не в типизированных языках, к примеру в JavaScript: let person = ‘Ivan’, где let — объявление переменной, person — название переменной, ‘Ivan’ — значение переменной. Но в типизированных языках программирования после объявления и перед значение переменной оговаривается её тип. Например, что в нашем примере это будет строка, в большинстве языков, это string или str.
Ну что же приступим к языку Leo. В Leo нет таких значений как undefined или null. К примеру в том же JS есть такие типы данные, но в случае с языком Leo при присвоении новой переменной тип значения должен быть явно указан.
Переменные в Leo всегда передаются по значению, что означает, что они всегда копируются, когда используются в качестве входных данных функции или в назначениях.
Leo поддерживает стандартный true или false логические значения. Для этого требуется явный bool тип для логических значений в инструкциях.
let c: bool = false;
То есть в примере выше мы объявили с помощью let переменную с названием c, после чего задали ей логический тип — bool и его значение — false.
Так же Leo поддерживает целые числа со знаком i8
, i16
, i32, i64
, i128
И целые числа без знакаu8
, u16
, u32
, u64
, u128.
let с: u8 = 1u8;
Целые числа с более высокой битовой длиной создают больше ограничений в схеме, что может замедлить время вычислений.
Так же хочу отметить, что Leo не поддерживает привидение типов, поэтому язык программирования не будет по умолчанию использовать целочисленный тип. Определение должно включать явный тип.
let с: u8 = 2u8; // явный тип, все окей
let v: u8 = 2; // неявный тип, работать не будет
Leo поддерживает field тип собственных элементов поля в виде чисел без знака вплоть до длины модуля поля.
let c: field = 1field;
let v: field = 2188824287183927522224640574525727503698;
Так же Leo поддерживает группы, это немного не стандартный тип данных. Набор аффинных точек на эллиптической кривой переданный компилятору и образует группу. Leo поддерживает этот набор как примитивный тип данных. Элементы группы особенные, поскольку их значения могут быть определены по координате x пары координат. К примеру: 1group. Ключевое слово типа группы — group должно использоваться при указании координаты группы.
let c: group = 0group; // ноль группы
let v: group = 1group; // генератор групп
let b: group = 2group; // 2 * генератор группы
Leo поддерживает scalar тип для элементов поля в скалярном поле.
let c: scalar = 1scalar;
Так же в Leo существует такой тип данных, как address, что думаю не удивительно. Адреса определены для включения оптимизированных компилятором подпрограмм для синтаксического анализа и работы с адресами. Эта семантика будет сопровождаться стандартной библиотекой в будущем спринте.
function main(owner: address) {
let receiver: address = aleo1ezamst4pjgj9zfxqq0fwfj8a4cjuqndmasgata3hggzqygggnyfq6kmyd4;
}
Как итог, я могу выделить то, что язык программирования Leo содержит как стандартные типы данных, так и не стандартные для обывателя в программировании. Но вся эта информация выглядит довольно интересно, мы можем наглядно увидеть как выглядит код под капотом и из чего он состоит и по какой логике идет работа. Лично меня заинтересовала функция, которую мы увидели в конце этой статьи, которая принимает в себя адрес отправителя, а в самой функции объявлен адрес получателя, да она не закончена, но синтаксис довольно классный, не так ли?