Я пытаюсь создать DSL для своего проекта iOS.
Для этого я планирую построить Semantic Model
в форме State Machine
.(Терминология взята из книги Фаулера о DSL).
Основная идея: State Machine
кодируется как набор states
и transitions
между ними, и затем могут быть написаны некоторые модульные тесты, чтобы проверить, приводит ли some_action
к some_state1
систему к some_state2
.
Проблема в том, что в моем приложении много фоновых потоков, поэтому в данный момент в State Machine может быть активным более одного состояния.
Я читал, что такие конечные автоматы Nondeterministic finite automaton
, пролистал вики-страницу, но для меня это выглядит слишком теоретически.
Вот пример конечного автомата:
s8
можно активировать только тогда, когда он получил t7
и t8
, это означает, что он должен «ждать».
Вопросы:
1. Есть ли что-то вроде "wait"
в конечных автоматах?
2. Может быть, это не NFA, а два конечных автомата?Меня должно волновать, как назвать такую семантическую модель вообще?
3. Можно ли реализовать s8
с некоторым фоновым потоком, который принимает уведомления от s4
и s7
и активируется только тогда, когда оба они отправили уведомления (это означает, что модульный тест не пройден, когдатайм-аут достигнут, и тогда этот тайм-аут должен быть упомянут где-то в модели)?