Форум сайта python.su
Возникла необходимость реализации.
Пока нашел только два достойных варианта:
fsm из panda3d и epsilon.modal из divmod.org команды. modal, кажется, куда лучше.
Может, еще что посоветуете?
Хоть тема в вебе и не нужна практически, но в standalone клиентах часто требуется
Офлайн
По своему опыту знаю, что под FSM часто понимают весьма разные вещи. Может уточните?
Названные вещи не видел.
Но видел рецепт в поваренной книге на сайте ActiveState. Очень просто и логично.
Плюс пытался пользоваться генератором SMС. Ну и гадость этот SMС скажу я вам. Хотя… на вкус и цвет…
Кажется еще в проекте WhatOS было что-то.
Посмотрю названные вами либы. Может пойму, что именно вам нужно.
Отредактировано (Май 29, 2007 09:45:07)
Офлайн
Так интересно узнать новые термины (вернее не новые, но мне пока неизвестные). Расскажите, пожалуйста, на русском языке, что такое “finite state machine”? заранее благодарна
Офлайн
По рюсски – это конечные автоматы.
Вот здесь неплохое введение для чайников: http://softcraft.ru/design/ap/ap01.shtml
А здесь: http://softcraft.ru/auto.shtml
туча статей на эту тему, для более глубокого погружения.
Можно видеть, что автоматное движение имеет несколько основных направлений и идеологий: switch и КА.
Также неплохо почитать статью о состоянии дел за рубежом, искать по ключевому слову “синхронное программирование” (гугля с википедией рулят)
http://www.softcraft.ru/auto/switch/syncprog/index.shtml
Вот на википедии: http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Вобщем для старта этого будет достаточно.
Отредактировано (Май 29, 2007 09:22:21)
Офлайн
bialixПосмотрел. В общем понятно к чему вы стремитесь.
Посмотрю названные вами либы. Может пойму, что именно вам нужно.
Офлайн
мне нужно описать поведение клиента. Естественнее всего оно выражается в два десятка состояний с довольно нетривиальными переходами. Так что без FSM обойтись сложно.
В epsilon введение состояний как внутренних классов с их последующей инструментацией мне понравилось. Хорошо разносит логику различных режимов.
IAR видел. Не прижился почему-то. Наверное, я тогда думал несколько по другому.
Для С++ есть statechart (официально включена в boost) и fsm - лежит в boost vault. Обе - вполне изящны.
У divmod традиционно туго с документацией. Но неплохо с тестами, а epsilon весьма невелика. Мне тестов (а потом и исходников) вполне хватило.
P.S. Питон вполне может заменить DSL - по моему глубокому убеждению.
Примерно как в nevow.tags - еще одном продукте от divmod:
a(href='url')['This is', b, ‘and’, i, ‘text’]
Отредактировано (Май 29, 2007 10:28:12)
Офлайн
Андрей СветловУ меня практически все сишные программы строятся на автоматах. Поэтому мне без них вобще обойтись сложно. А питон – ИМХО – слишком сложно или некрасиво там автоматы делать руками, поэтому я там не заморачиваюсь.
мне нужно описать поведение клиента. Естественнее всего оно выражается в два десятка состояний с довольно нетривиальными переходами. Так что без FSM обойтись сложно.
Андрей СветловИсходники-то я прочел и кажется понял как оно предполагается работать. Просто хотелось уточнить.
У divmod традиционно туго с документацией. Но неплохо с тестами, а epsilon весьма невелика. Мне тестов (а потом и исходников) вполне хватило.
Андрей СветловНе-а. По моему глубокому убеждению – не может. Слишком нечитаемо получается, слишком много мусора.
P.S. Питон вполне может заменить DSL - по моему глубокому убеждению.
Примерно как в nevow.tags - еще одном продукте от divmod:
a(href='url')['This is', b, ‘and’, i, ‘text’]
Офлайн
вот кстати тот рецепт из поваренной книги, который я упоминал:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/146262
так, до кучи. там нет действий по выходу и входу из/в состояние, но наверное их можно доточить по принципу epsilon, при желании конечно. видел код этого рецепта использовался в каком-то реальном OSS проекте. Не помню каком.
Отредактировано (Май 29, 2007 11:13:05)
Офлайн
По поводу DSL спорить точно бессмысленно. Это почти как религия, и каждый подход имеет свои достоинства и недостатки.
Посмотрел WhatOS и aspn coockbook.
WhatOS - интересно, но С специфика сильно проявляется. aspn - простенько до неудобства. У меня каждое состояние - довольно большая вещь, скорее не атом, а режим работы программы. Так удобнее. Иначе состояний появляется бесчетное множество и прописывать переходы между ними становится затруднительно.
Немного докрутил (были проблемы с наследованием состояний), и доволен. Состояния можно разносить по отдельным модулям - удобно.
По сути наследник mode рассматривается как специфическая запись контейнера именованных функций, не более того. И экземпляр его не создается.
Занятная вещь получилась
Офлайн
Да, кстати, глупый вопрос.
Как связаться с ребятами из divmod.org?
То, что я доделал к их epsilon.modal у них же помечено как todo: fix this bug.
В процессе дальнейшей работы мы скорее всего еще несколько расширим функциональность (нам важны конечные автоматы, а у них почти-почти то).
Я не прочь отправить им патч к модулю и тесту - авось включат.
Кстати, их тест весь модуль не покрывал - была нестыковочка.
Вот только на их trac guest новый тикет создать не может. А почтового адреса, чтобы послать письмо, я так и не нашел.
Что делать?
Написал, и самому смешно.
Офлайн