Continuation
Первичная вычислительная сущность TVM: «продолжение» — указатель на отрезок кода + контекст исполнения. Заменяет привычные процедуры и функции — все control-flow примитивы TVM строятся на continuation'ах.
Синонимы: continuation tvm, продолжение tvm
Continuation — фундаментальная вычислительная сущность TVM, заменяющая привычные понятия «функция», «процедура», «return-address». Это структура, содержащая указатель на отрезок кода + контекст исполнения (стек, регистры).
Зачем
В TVM нет инструкции CALL в Z80/x86-смысле — есть только манипуляции с continuation’ами. IFJMPREF { ... }, CALLREF, RETALT и т.д. — все они работают на continuation-уровне. Это даёт:
- Высшие функции в FunC/Tact/Tolk «бесплатно»: continuation == first-class value.
- Try/catch через
c2-альтернативный continuation. - Loop’ы через recursion или через
WHILE { c1 } { c2 }-комбинаторы.
Особенность для приходящих с EVM
Для разработчиков, приходящих с EVM, это самый необычный концепт TVM. Рекомендуется сразу почитать TVM Whitepaper §4 («Control flow, continuations, exceptions»), прежде чем писать собственный нетривиальный контракт. Без понимания continuation’ов невозможно прочитать TASM моста или биржи.