Типы
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять у частие в переводе свяжитесь с @alexgton.
Документация по FunC была изначально написана @akifoq.
FunC имеет следующие встроенные типы.
Атомарные типы
int
— тип 257-битных знаковых целых чисел. По умолчанию проверки переполнения включены и приводят к исключениям переполнения целых чисел.cell
— тип ячеек TVM. Все постоянные данные в блокчейне TON хранятся в деревьях ячеек. Каждая ячейка имеет до 1023 бит произвольных данных и до четырех ссылок на другие ячейки. Ячейки служат памятью в стековых TVM.slice
— тип срезов ячеек. Ячейку можно преобразовать в срез, а затем биты данных и ссылки на другие ячейки из ячейки можно получить, загрузив их из среза.builder
— тип построителей ячеек. Биты данных и ссылки на другие ячейки могут храниться в конструкторе, а затем конструктор может быть завершен для новой ячейки.tuple
- тип кортежей TVM. Кортеж - это упорядоченная коллекция, содержащая до 255 компонентов с произвольными типами значений, которые могут отличаться друг от друга.cont
- тип продолжений TVM. Продолжения используются для управления ходом выполнения программы TVM. С точки зрения функциональности, это объект довольно низкого уровня, хотя, как это ни парадоксально, довольно общий.
Обратите внимание, что любой из типов выше занимает только одну запись в стеке TVM.
Отсутствие логического типа
В FunC логические значения представлены как целые числа; false
представлено как 0
, а true
представлено как -1
(257 единиц в двоично й записи). Логические операции выполняются как побитовые операции. При проверке условия каждое ненулевое целое число считается значением true
.
Нулевые значения
Значением null
типа TVM Null
FunC представляет отсутствие значения некоторого атомарного типа. Некоторые примитивы из стандартной библиотеки могут быть типизированы как возвращающие атомарный тип и фактически возвращающие null
в некоторых случаях. Другие могут быть типизированы как исключающие значение атомарного типа, но также прекрасно работать со значениями null
. Такое поведение явно указано в спецификации примитива. По умолчанию значения null
запрещены и приводят к исключению во время выполнения.
Таким образом, атомарный тип A
может быть неявно преобразован в тип A^?
, также известный как Maybe A
(проверка типов не зависит от такого преобразования).