Finitomata
Шаблонный код конечных автоматов на основе колбэков
предоставляет шаблонный код для реализации конечных автоматов, позволяя сосредоточиться на бизнес-логике, а не на управлении процессами и согласованности переходов. Он читает описание автомата из строки в синтаксисе PlantUML (
:state_diagram
) или Mermaid (
:flowchart
), проверяет его согласованность (одно начальное состояние, одно или несколько конечных, отсутствие «осиротевших» состояний) и генерирует
GenServer
, который можно использовать отдельно или в дереве супервизии.
Сгенерированному автомату нужен только один обязательный колбэк —
on_transition/4
;
on_failure/3
,
on_enter/2
,
on_exit/2
,
on_terminate/1
и
on_timer/2
опциональны и имеют разумные реализации по умолчанию. Поведение настраивается опциями:
timer:
для периодических колбэков,
auto_terminate:
для автоматического перехода в конечное состояние,
ensure_entry:
для повторных попыток перехода,
hibernate:
,
cache_state:
и подключаемая персистентность (встроенные адаптеры ETS и DETS).
Infinitomata
, поставляемый в том же пакете, — это самодостаточная распределённая реализация на основе
:pg
для запуска тех же автоматов в кластере.
Finitomata.ExUnit
даёт тестовый харнесс без внешних зависимостей с
assert_transition/3
, проверками сбоев и генерацией событий для property-based тестов.