Как стать автором
Обновить

Создаём надёжные API для бэкенда при помощи конечных автоматов: подробное руководство

Время на прочтение7 мин
Количество просмотров8.1K
Всего голосов 8: ↑9 и ↓-1+10
Комментарии18

Комментарии 18

Есть ощущение, что автор оригинала только-только узнал, что существуют конечные автоматы и пытается их запихнуть всюду куда дотягиваются руки.

Причём, узнал очень поверхностно.

Это ромбики и овалы со стрелочками?

Если коротко: нет.

В любой момент времени система находится в одном из определённых состояний, а переходы инициируются при наступлении ...

Мне всегда было интересно послушать что скажут проповедники конечных автоматов на вопрос:

А в каком состоянии находится конечный автомат в момент перехода?

Но они почему-то всегда избегают ответа на этот вопрос.

Сперва ответьте на два вопроса:

  1. Кто такие "проповедники конечных автоматов"?

  2. С какой стати в системе, где переход не может произойти мгновенно (синхронно, атомарно), применяется автоматный подход?

Интересно, а где это переход может произойти мгновенно?

Пример можете привести?

В лексических анализаторах языков. Там весь переход заключается в одной операции присвоения.

Это классический пример. Вы когда-нибудь задумывались, что "под капотом" у регулярных выражений? А там - конечный автомат (либо автомат с магазинной памятью).

Вы когда-нибудь задумывались, что "под капотом" у регулярных выражений? А там - конечный автомат (либо автомат с магазинной памятью).

мне не надо задумываться, я код вижу.

Конечные автоматы это концепция из прошлого века, если не сказать из прошлого тысячилетия. По ней строились первые процессоры, но даже из архитектуры процессоров она отодвинулась на позицию исторических, хотя конечно фундаментальных знаний, потому что ее практическая ценность стремится к нулю при произошедшем значительном усложнении даже аппаратных систем. Считать состоянием то что записано к килобайтах, а тем более в мегабайтах - это что-то странное - сколько же у вас состояний? больше чем атомов во вселенной?

Регулярные выражения обрабатываются через стек вызовов, одного присваивания там явно не достаточно, исли вы конечно полноценные регулярные выражения имели ввиду, а не то на чем кто-то изучает конечные автоматы.

Конечные автоматы это концепция из прошлого века, если не сказать из прошлого тысячилетия.

Возраст - не повод полностью отказываться от инструмента или методологии. Последовательную запись и выполнение операторов, условные операторы и циклы тоже давным-давно придумали, но ничего, пользуемся и по сей день.

сколько же у вас состояний? больше чем атомов во вселенной?

Всех возможных состояний системы (в автоматном программировании их называют вычислительными) - да, может быть и больше, чем атомов. А вот важных для управления системой (это управляющие состояния) - намного меньше.

Как пример - баланс средств на счете может быть любым, от нуля до бесконечности. Значение баланса - вычислительное состояние. Но для совершения действия в системе (т.е. для управления системой) важно лишь, достаточно ли на счету средств для оплаты покупки. Вычислительных состояний потенциально бесконечно много, но управляющих в данном конкретном примере - всего два.

Примерно всё, что Вы написали в этом посте - неправда.

И реализацию регулярных выражений Вы, очевидно, тоже не смотрели.

Это интересный аргумент!

Видимо, правду здесь пишете только вы.

Мне кажется, тут нужно различать состояния автомата и состояния системы, управляемой автоматом. Автомат должен быть спроектирован и реализован так, чтобы его состояния сменялись мгновенно/синхронно/атомарно. В таких условиях Ваш вопрос будет лишен смысла.

Автомат должен быть спроектирован и реализован так, чтобы его состояния сменялись мгновенно/синхронно/атомарно. В таких условиях Ваш вопрос будет лишен смысла.

Мне кажется что мой вопрос лишен смысла потому что тем кто оперирует терминологией конечных автоматов сейчас совершенно не интересно каким образом меняются состояния, им интересно порассуждать что считать состояниями. Эти рассуждения всегда очень красиво выглядят в глазах аудитории.

Давайте в этой ветке всегда будем уточнять, о состоянии чего в данный момент времени идет речь - о состоянии управляющего автомата или о состоянии управляемой системы.

Будем красиво выглядеть в глазах аудиториии и, возможно, придем к имеющему практический смысл соглашению :)

красиво выглядеть в глазах аудиториии

как-то так сложилось что это не моя специализация :)

Это похоже на переходный процесс и чтобы все было корректно на время переходного процесса система не должна позволять другим процессам ничего менять в текущем. Как способ достижения этого можно взять например транзакцию.

Не статья, а вода просто. Да и заголовок вводит в заблуждение. В любой библиотеке для описания fsm то же самое напишут, только четко и по делу. Зачем тащить бесполезные статьи ноунеймов?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий