Finitomata

Шаблонный код конечных автоматов на основе колбэков

Active ElixirOTPGenServerFSM 130 89031
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 тестов.