Tolk — новый язык для разработки смарт-контрактов на TON, который заменил FunC
Всем привет! Я Александр Смирнов, пишу смарт-контракты на FunC и Solidity в MetaLamp. Хотел рассказать про Tolk, его основные отличия от FunC и свое впечатление о нем.
Tolk больше похож на TypeScript и Kotlin, в отличие от FunC, который выглядит как C или Lisp. Однако он по-прежнему даёт контроль над ассемблером TVM, поскольку внутри него находится ядро FunC.
Основные отличия Tolk и FunC:
1) Объявление функции происходит через fun
, геттера — через get
;
2) Переменные объявляются через var
, неизменяемые (immutable) переменные — через val
;
3) Cпецификаторы функций, такие как inline
, записываются как декораторы: @inline
;
4) Типы указываются справа через двоеточие. Также тип возвращаемого значения можно опустить (он будет определен автоматически);
5) Никакого impure: по умолчанию компилятор не будет выкидывать пользовательские вызовы функций;
6) recv_internal
, recv_external
заменяются на onInternalMessage
, onExternalMessage
;
7) Поддерживаются люгичесие операции И (&&
), ИЛИ (||
), отрицание (!
);
8) Идентификаторы буквенно-цифровые, 2+2 — это 4 (в отличие от FunC, где это 2+2), нейминг выглядит следующим образом: const OP_INCREASE = 123456
; (вместо const op::increase = 123456
; в FunC — сейчас компилятор выдаст ошибку);
9) Улучшения в синтаксисе;
10) Функция может быть вызвана до ее объявления: компилятор сначала парсит, а затем сопоставляет вызываемые функции. Сейчас исходный код представляется как абстрактное синтаксическое дерево (AST);
11) Наименование переменных и функций в Tolk в camelCase
, в отличие от snake_case
в FunC;
12) Никакой тильды (~
)! Ее совсем убрали, теперь не нужно возиться с изменением объектов, так как методы возвращают self
, аналогично JavaScript;
13) Не нужно импортировать stdlib, однако, если работаете со словарями, нужно импортировать "@stdlib/tvm-dicts";
Для ленивых продвинутых можно воспользоваться удобным инструментом для преобразования FunC в Tolk. На 100% доверять ему не стоит, так как сами разработчики пишут, что необходимы небольшие ручные правки, поэтому лучше освоить Tolk и использовать для ускорения переезда с FunC. Его удобно использовать совместно с Blueprint.
Общее впечатление от Tolk: писать стало комфортнее, но это скорее для тех, кто привык работать с TypeScript. Много упрощений, а также код выглядит более читаемым. Зная FunC, можно за небольшое время перейти на Tolk. Уже есть плагины для VSCode и JetBrains, поэтому подсветка синтаксиса работает.
Больше постов от разработчиков можно найти в нашем телеграм-канале :)