- 1
- 2
- 3
- 4
- 5
- 6
- 7
При решении каких задач наиболее органично использовать конечные автоматы?
Посоветуйте задачи, желательно прикладные и не из области разбора регулярных выражений
или лексического анализа. Какой-нибудь пример, на котором можно продемонстрировать
практическое применение конечных автоматов.
Где вам пригождались автоматы или знания о них в реале?
Любая (компьютерная, карточная, настольная) игра — это конечный автомат, где действия игрока — это события, изменяющие (обычно многочисленные, но конечные) состояния игрового мира.
Любая база данных, не обладающая бесконечной памятью — это конечный автомат, где пользовательские запросы являются событиями. Аналогично можно рассматривать и веб-сервер.
Как это можно использовать? Для тестирования, к примеру, генерируя случайные наборы событий и проверяя, что поведение автомата удовлетворяет инвариантам.
Тут много технических деталей, но идея, кмк, очень красивая > Где вам пригождались автоматы или знания о них в реале?
В основном видел много сетевого кода, организованного в виде огромной таблицы функций, в которой одним индексом является текущее состояние, а в другом — тип полученного пакета.
Да, с играми можно придумать замечательные примеры.
О, я вижу, что был превратно понят. Видимо, я неясно высказался. Я не имел ввиду, что разбор регулярных грамматик -- это не практический случай. Я только имел ввиду, что хочу узнать другие случаи практического применения, потому что с этими я уже знаком.
Но ведь кто-то должен всё это пилить?
Да, но с вероятностью 100% такие люди найдутся. Об этом не нужно специально заботиться, это место пусто не будет, туда невидимая рука рынка сама поставит какого-то человека, скорее всего посредственного специалиста, или уставшего, или нуждающегося, или не амбициозного. Ну, как сказали выше, «среднестатистического». Это ОК. Но вот зачем специально размышлять о таком человеке, или уж тем более умышленно им быть, я не понимаю.
Специально думать надо про свободные программы, потому что они нуждаются в этом, там законы рынка не действуют, там анархия.
И где исходники скачать?
Лол, а ты не знал? )
Вот не лень было тебе переключать раскладку, чтобы после «knife» написать русскими буквами «сайнс»
> попенсорц
/0
Проезжая мимо станции, у меня улетела шляпа
> что нужно знать дохуя всего чтобы быть веб-макакой
Нет, не нужно. Будь ей, без каких-либо знаний, я лично тебе разрешаю.
Так я и спросил, здесь разве не программисты сидят? Повторяю, это НЕ форум для домохозяек, тут мои коллеги, программисты.
> в интернет понтоваться ходят
Давай разберём по частям тобою написанное. Чтобы понтоваться, непременно нужен зритель. На этом сайте любой человек, кроме пхпшного рачья, знает больше меня в несколько раз, и у них я могу только поучиться. Получается, я понтуюсь перед тобой? Но что-то я не припомню, чтобы ты был как-то особенно мною очарован. И в чём же тогда понт?
Вот например 1024-- мой вопрос показался интересным, и цели, с которой я его задал, я тоже достиг.Но я НЕ СТАВИЛ вопрос о том, нужны ли кому-то автоматы и обязательно ли их кому-нибудь знать. Это уже твой личный Freud.
Пиши на си, заодно и память течь будет.
Наверное. Как и кривое кеширование когда кеш не отпускает старые объекты.
Если под средним-по-больнице программистом понимается более-менее что попало, тогда средний программист в среднем может знать какую угодно теорию и помочь ему на практике и что-то дать в работе тоже может приблизительно что угодно.
P.S.
> Где вам пригождались автоматы или знания о них в реале?
Чесно говоря, знания о автоматах на мозг не давят. Можно сформировать в одном предложении:
"храним состояние и переходим в другое по выволнению некоего условия"
Поподробнее?
Самих состояний может быть много. Писать их не буду, слишком специфично. Однако, если с точки зрения аггрератора цен, то там навеное не так уж и много состояний
Латыш, шоль?
В архиве брата Шуберта?
"Неоконченная симфония", таки? Какая прелесть!
Обокан, АКМ, АКМ-У, Скорострельный АКМ в "Тени чернобыля", "Зове припяти", "Чистом нёбе"
> или знания о них в реале
В пизде
Вот в веб-питушне что-то такое наблюдается. Есть форма, есть валидация, есть отсылка запросов. Кто-то давит на кнопку, и обработчик должен учитывать, что питушня находится в одном из состояний:
* есть изменения и ничего не сохраняли
* нажимали на кнопку, запрос на валидацию идёт
* запрос на валидацию прошёл, валидно
* нажимали на кнопку, запрос на сохранение идёт
* нет изменений или всё сохранили
И тут и клиент эту пишутню с учётом этих стадий обрабатывает, и сервер. Дальше ещё можно добавить "авторизован/не авторизован для сервера" и "отправлена первая часть формы", "... вторая...", ...
"Платон мне друк, да истина дороже."
Но напоминает только концептуально. Такого, чтобы кто-то на уровне кода применял стейт-машины для подобных задач, я не видел. Возможно это оттого, что часто в начале работы над проектом реализуется какое-то очень небольшое подмножество бизнес-логики, а потом никто уже не рефакторит усложнившуюся систему, а просто добавляют кучу трудно отлаживаемых и противоречивых условий, при которых у кнопки «Редактировать» будет `display: block;`
А ещё поведение задачи на гибкой доске (also known as agile board для тех, кто ненавидит свой родной русский язык и использует буржуйские термины) очень похоже на конечный автомат:
planning
todo
in progress
code review
in progress
code review
...
testing (todo)
testing (in progress)
reopened
code review
...
testing (todo)
testing (in progress)
reopened
code review
...
done
closed
Не найду, это сленг, причём это не то же самое, что конечный автомат. Стейт-машина не обязательно конечна. Конечна финит-стейт-машина.
Спасибо.