Глубокое погружение в Fift
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Высокоуровневый стековый язык Fift используется для локальной манипуляции ячейками и другими примитивами TVM, в основном для преобразования ассемблерного кода TVM в код контракта bag-of-cells.
В этом разделе описывается взаимодействие с специфичными для TON функциями на очень низком уровне. Требуется серьезное понимание основ стековых языков.
Простая арифметика
Вы можете использовать интерпретатор Fift как калькулятор, записывая выражения в обратной польской нотации.
6 17 17 * * 289 + .
2023 ok
Стандартный выход
27 emit ."[30;1mgrey text" 27 emit ."[37m"
grey text ok
emit
берет число с вершины стека и выводит символ Unicode с указанным кодом в stdout.
."..."
выводит строку-константу.
Определение функций (Fift-слов)
Основной способ определения слова - заключить его значения в фигурные скобки, затем написать ":" и название слова.
{ minmax drop } : min
{ minmax nip } : max
Fift.fif
Хотя есть несколько "определяющих слов", а не только ":". Они отличаются в смысле слов, определяемых некоторыми из них, активные (работают внутри фигурных скобок), а некоторые префиксные (не требуют пробела после них):
{ bl word 1 2 ' (create) } "::" 1 (create)
{ bl word 0 2 ' (create) } :: :
{ bl word 2 2 ' (create) } :: :_
{ bl word 3 2 ' (create) } :: ::_
{ bl word 0 (create) } : create
Fift.fif