Тема 4. Ещё немного о типах данных
Помимо атомарных типов данных, в FunC представлены и более сложные типы, которые могут быть использованы при решении нетривиальных задач.
1. Абстрактный тип.
FunC поддерживает модель типов данных, в которой тип определяется семантикой с точки зрения пользователя данных, то есть набором возможных значений и соответствующих операций над данными этого типа. Типы
_ и
var представляют собой абстрактные типы (hole types), которые во время проверки при компиляции заменяются на фактические. Например, «
var x = 2
;» – это определение переменной
x, равной 2. Средство проверки типов может сделать вывод, что
x имеет тип
int, потому что 2 имеет тип
int, а левая и правая части присваивания должны иметь одинаковые типы.
2. Функциональный тип.
Типы вида
A -> B представляют функции с указанием типа входящего аргумента и типа возвращаемого значения. Например,
int -> cell – это тип функций с целочисленным аргументом, которые возвращают ячейку TVM. Внутренние значения таких типов представлены в виде продолжений (тип
cont).
3. Кортежный тип.
Типы вида
[A, B, ...] представляют собой кортежи TVM с конкретной длиной и известными заранее (до компиляции) типами компонент. Например,
[int, cell] – это тип кортежей TVM длины 2, где первая компонента является целым числом, а вторая – ячейкой.
[] – это тип пустых кортежей.
Любые типы могут быть объединены в составной тип, поддерживаемый FunC.
С документацией можно ознакомиться на
официальном сайте TON.