https://t.me/drakon_techДо недавних пор у меня в голове был смысловой разрыв между иконами реального времени языка ДРАКОН (Вставка, Ввод) и конечными автоматами. И то, и другое моделирует динамику взаимодействия, но по-разному.
Конечный автомат – это деятельный, но неподвижный предмет, который взаимодействует с окружающим миром.
ДРАКОН-схема же содержит в себе историю, которая развивается во времени.
Мне было непонятно, почему эти два способа описания сходных динамических процессов никак не связаны.
Оказалось, что связь есть!
Вот как я это выяснил. Я работал над поддержкой асинхронных операций на JavaScript в Drakon.Tech. Идея состояла в том, что запуск долгоиграющего дочернего процесса и ожидание его завершения производятся в иконе Вставка. Пример – запрос к веб-сервису. Икона Вставка в Drakon.Tech примерно соответствует конструкции async/await.
Если же нужно дождаться сообщения от параллельного или родительского процесса, то применяется икона Ввод. Тоже как бы await, но без запуска дочернего процесса.
Довольно быстро выяснилось, что взаимодействующие процессы весьма удобно реализовывать в виде конечных автоматов. ДРАКОН-схема преобразуется в конечный автомат, причём для каждой иконы Вставка и Ввод создаётся отдельное состояние. Выполнение процесса происходит в виде работы конечного автомата, который движется от одного состояния к другому.
Какой из этого следует полезный для человечества вывод?
1. Когда в алгоритме есть история, то есть предопределённая последовательность, лучше использовать ДРАКОН-схемы с иконами Вставка и Ввод. Пример: алгоритм, который запускается при нажатии кнопки на пользовательском интерфейсе.
2. Когда алгоритм основан на реагировании, когда нет заранее прописанного ряда шагов, лучше создать конечный автомат в явном виде. Пример: управление анимациями и визуализацией в самом пользовательском интерфейсе.
Причём Drakon.Tech позволяет в одной программе комбинировать автоматы, написанные вручную и сгенерированные из асинхронных ДРАКОН-схем.