Почему нужен “𝚞𝚜𝚎 𝚜𝚝𝚎𝚙”? Кто-то заметил, что шаги в рабочем процессе похожи на “контрольные точки” в видеоигре. Хорошая аналогия. Интересное следствие пометки функции как “𝚞𝚜𝚎 𝚠𝚘𝚛𝚔𝚏𝚕𝚘𝚠” заключается в том, что вам не разрешается выполнять ввод-вывод, кроме шагов. Рабочие процессы должны быть свободны от побочных эффектов и детерминированы. Каждый раз, когда вы 𝚊𝚠𝚊𝚒𝚝, эта функция должна быть шагом. Эти вызовы функций можно рассматривать как сериализуемые продолжения. Входные и выходные данные этих функций фиксируются в журнале. Подумайте о JSON. Если у вас есть рабочий процесс с 3 шагами, и последний из них не удался, мы должны иметь возможность “повторно запустить” всю функцию и иметь полное представление о состоянии мира. Таким образом, “𝚞𝚜𝚎 𝚜𝚝𝚎𝚙” на самом деле очень похож на “𝚞𝚜𝚎 𝚌𝚊𝚌𝚑𝚎” или “𝚐𝚎𝚝𝚂𝚝𝚊𝚝𝚒𝚌𝙿𝚛𝚘𝚙𝚜” — функции, которые могут быть экстернализированы и изолированы в пространстве и времени, работающие на разных “компьютерах”.